مدیریت حافظه در زبان C
در این بخش نحوه مدیریت حافظه به صورت پویا توضیح داده شده است. در زبان برنامه نویسی C توابع تخصیص و مدیریت حافظه مختلفی وجود دارد که در هدر فایل stdlib.h قرار دارند.
ردیف | توضیحات |
۱ | void *calloc(int num, int size);
فضای حافظه مورد نیاز یک آرایه را به طول num اختصاص می دهد. با مقدار دهی اولیه. |
۲ | void free(void *address);
این تابع فضای حافظه اختصاص داده شده را آزاده می کند. |
۳ | void *malloc(int num);
فضای حافظه مورد نیاز یک آرایه را به طول num اختصاص می دهد. بدون مقدار دهی اولیه. |
۴ | void *realloc(void *address, int newsize);
این تابع فضای اختصاص داده شده رو با اندازه جدید به روز می کند. |
اختصاص حافظه به صورت پویا
در برنامه نویسی تعریف یک آرایه که اندازه معلوم و مشخصی دارد کار راحتی است. برای نمونه اگر بخواهید نام هر فرد را ذخیره کنید، یک آرایه با طول ۱۰۰ کاراکتر تعریف می کنید مانند نمونه زیر:
char name[100];
اما ممکن است گاهی اوقات موقعیتی پیش آید که شما طول آرایه را ندانید. مثلا زمانی که می خواهیم یک توضیح دقیقی در مورد چیزی از کاربر بگیریم، در این حالت ما نمی دانیم که کاربر چند کاراکتر وارد خواهد کرد تا طول آرایه بر اساس آن تنظیم کنیم. بنابراین در این مواقع ما نیاز داریم تا میزان حافظه اختصاصی را به صورت پویا و بر اساس نیاز تعیین کنیم.
به مثال زیر توجه کنید:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char name[100]; char *description; strcpy(name, "Zara Ali"); /* allocate memory dynamically */ description = malloc( 200 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Error - unable to allocate required memory\n"); } else { strcpy( description, "Zara ali a DPS student in class 10th"); } printf("Name = %s\n", name ); printf("Description: %s\n", description ); }
امتحان کنید
زمانی که کد بالا توسط کامپایلر زبان C و اجرا شود، نتیجه زیر را تولید خواهد کرد:
Name = Zara Ali Description: Zara ali a DPS student in class 10th
مثال فوق را می توان با استفاده از تابع calloc() نیز نوشت:
calloc(200, sizeof(char));
بنابراین موارد فوق در هنگام استفاده از حافظه پویا، شما به راحتی می توانید اندازه آرایه بر اساس نیاز خود تنظیم کنید. در حالی تغییر اندازه آرایه های عادی امکان پذیر نیست، زیرا آن ها اشاره گر ثابت هستند.
تغییر اندازه و آزاد سازی حافظه
در حالت عادی هنگامی که اجرای برنامه شما پایان می یابد، سیستم عامل به طور خودکار آن را از حافظه خارج می کند و فضای حافظه آزاد می شود. اما زمانی که از تخصیص حافظه پویا استفاده کرده باشید، هنگامی که کارتان تمام شد و دیگر نیازی به حافظه ندارید، می توانید آن را با استفاده از تابع free() آزاده کنید.
در زبان C شما می توانید با استفاده از تابع realloc() اندازه حافظه اختصاص داده شده را کم یا زیاد کنید. مثال زیر تغییر یافته مثال فوق می باشد که در آن از توابع realloc() و free() استفاده شده است:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char name[100]; char *description; strcpy(name, "Zara Ali"); /* allocate memory dynamically */ description = malloc( 30 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Error - unable to allocate required memory\n"); } else { strcpy( description, "Zara ali a DPS student."); } /* suppose you want to store bigger description */ description = realloc( description, 100 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Error - unable to allocate required memory\n"); } else { strcat( description, "She is in class 10th"); } printf("Name = %s\n", name ); printf("Description: %s\n", description ); /* release memory using free() function */ free(description); }
امتحان کنید
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
Name = Zara Ali Description: Zara ali a DPS student.She is in class 10th
نوشته مدیریت حافظه در زبان C – آموزش زبان C اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.