آوریل 24, 2019 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)

 

 

 


برچسب ها
نظرات

توجه : لطفاً فقط نظرات خود را از این طریق ارسال نمایید و سوالات و مشکلات خود را در انجمن سایت مطرح نمایید.

دیدگاهتان را بنویسید

برای نوشتن دیدگاه باید وارد بشوید.