اردیبهشت ۴, ۱۳۹۸ Mostafa بدون دیدگاه

سوالات و مشکلات خود را در انجمن مطرح نمایید

مفهوم تخصیص حافظه پویا در زبان c، برنامه نویس C را قادر می سازد حافظه را در زمان اجرا اختصاص دهد. تخصیص حافظه پویا در زبان c با ۴ عملکرد از فایل header stdlib.h امکان پذیر است.

 

malloc()  
calloc()
realloc() 
free()

 


قبل از یادگیری توابع فوق، تفاوت بین تخصیص حافظه استاتیک و تخصیص حافظه پویا را درک کنید.

تخصیص حافظه استاتیکتخصیص حافظه پویا
حافظه در زمان کامپایل اختصاص داده شده است.حافظه در زمان اجرا اختصاص داده شده است.
هنگام اجرای برنامه حافظه نمی تواند افزایش یابد.حافظه را می توان در هنگام اجرای برنامه افزایش داد.
در آرایه استفاده می شوددر لیست پیوند استفاده شده است.

 

حالا اجازه دهید نگاهی سریع به روش های استفاده شده برای تخصیص حافظه پویا داشته باشیم.

malloc()اختصاص یک بلوک از حافظه درخواست شده را اختصاص می دهد.
calloc()چندین بلوک حافظه درخواستی را اختصاص می دهد.
realloc()مجدد حافظه اشغال شده توسط توابع malloc () یا calloc () مجددا اختصاص می دهد.
free()حافظه پویا اختصاص داده شده را آزاد می کند.

تابع malloc در C

تابع malloc () یک بلوک واحد از حافظه درخواست شده را اختصاص می دهد.

این مقدار حافظه را در زمان اجرا تعیین نمی کند، بنابراین ابتدا مقدار زباله را می گیرد.

اگر حافظه کافی نیست، NULL را باز می گرداند.

نحو عملکرد malloc () در زیر آمده است:

ptr=(cast-type*)malloc(byte-size)  

ptr=(cast-type*)malloc(byte-size)

بیایید مثال تابع malloc () را ببینیم.

#include<stdio.h>  
#include<stdlib.h>  
int main(){  
  int n,i,*ptr,sum=0;    
    printf("Enter number of elements: ");    
    scanf("%d",&n);    
    ptr=(int*)malloc(n*sizeof(int));  //حافظه اختصاص داده شده با استفاده از malloc
    if(ptr==NULL)                         
    {    
        printf("Sorry! unable to allocate memory");    
        exit(0);    
    }    
    printf("Enter elements of array: ");    
    for(i=0;i<n;++i)    
    {    
        scanf("%d",ptr+i);    
        sum+=*(ptr+i);    
    }    
    printf("Sum=%d",sum);    
    free(ptr);     
return 0;  
}    

#include<stdio.h>  
#include<stdlib.h>  
int main(){  
  int n,i,*ptr,sum=0;    
    printf("Enter number of elements: ");    
    scanf("%d",&n);    
    ptr=(int*)malloc(n*sizeof(int));  //حافظه اختصاص داده شده با استفاده از malloc
    if(ptr==NULL)                         
    {    
        printf("Sorry! unable to allocate memory");    
        exit(0);    
    }    
    printf("Enter elements of array: ");    
    for(i=0;i<n;++i)    
    {    
        scanf("%d",ptr+i);    
        sum+=*(ptr+i);    
    }    
    printf("Sum=%d",sum);    
    free(ptr);     
return 0;  
}

خروجی :

عناصر آرایه را وارد کنید: ۳
عناصر آرایه را وارد کنید: ۱۰
۱۰
۱۰
مجموع = ۳۰

 

تابع calloc () در C

تابع calloc () چندین بلوک حافظه درخواست شده را اختصاص می دهد.

ابتدا تمام بایت ها را صفر می کند.

اگر حافظه کافی نیست، NULL را باز می گرداند.

نحو عملکرد calloc () در زیر آمده است :

ptr=(cast-type*)calloc(number, byte-size)  

ptr=(cast-type*)calloc(number, byte-size)

بیایید مثال calloc () را ببینیم.

#include<stdio.h>  
#include<stdlib.h>  
int main(){  
 int n,i,*ptr,sum=0;    
    printf("Enter number of elements: ");    
    scanf("%d",&n);    
    ptr=(int*)calloc(n,sizeof(int));  
    if(ptr==NULL)                         
    {    
        printf("Sorry! unable to allocate memory");    
        exit(0);    
    }    
    printf("Enter elements of array: ");    
    for(i=0;i<n;++i)    
    {    
        scanf("%d",ptr+i);    
        sum+=*(ptr+i);    
    }    
    printf("Sum=%d",sum);    
    free(ptr);    
return 0;  
}    

#include<stdio.h>  
#include<stdlib.h>  
int main(){  
 int n,i,*ptr,sum=0;    
    printf("Enter number of elements: ");    
    scanf("%d",&n);    
    ptr=(int*)calloc(n,sizeof(int));      
    if(ptr==NULL)                         
    {    
        printf("Sorry! unable to allocate memory");    
        exit(0);    
    }    
    printf("Enter elements of array: ");    
    for(i=0;i<n;++i)    
    {    
        scanf("%d",ptr+i);    
        sum+=*(ptr+i);    
    }    
    printf("Sum=%d",sum);    
    free(ptr);    
return 0;  
}

مجموع :

عناصر آرایه را وارد کنید: ۳
عناصر آرایه را وارد کنید: ۱۰
۱۰
۱۰
مجموع = ۳۰

تابع realloc () در C

اگر حافظه برای malloc () یا calloc () کافی نیست، شما می توانید با استفاده از realloc () مجددا حافظه را دوباره اختصاص دهید. به طور خلاصه، اندازه حافظه را تغییر می دهد.

بیایید نحو عملکرد realloc () را ببینیم.

ptr=realloc(ptr, new-size)  

ptr=realloc(ptr, new-size)

تابع free() در زبان C

حافظه اشغال شده توسط توابع malloc () یا calloc () باید با فراخوانی تابع free () آزاد شود. در غیر این صورت، حافظه آن تا زمان خروج از برنامه مصرف خواهد شد.

بیایید نحو عملکرد آزاد () را ببینیم.

free(ptr)  

free(ptr)

 

 

 

نظرات

قسمت نظرات در حال حاضر غیرفعال می باشد