- تاریخ عضویت
- 22 ژانویه 2006
- نوشتهها
- 60
- لایکها
- 0
در مورد malloc و calloc یک کد خیلی ساده رو فعلا از help خود TC رو نگاه کنید :
در این برنامه هیچ متغییری به جز یک اشاره گر تعریف نشده است . ولی در انتها یک رشته که در حافظه ذخیره شده با کمک اشاره گر چاپ می شه .
در واقع توسط malloc حافظه ای به اندازه 10 کاراکتر از سیستم عامل درخواست می شه اگر حافظه پر باشه malloc مقدار NULL بر می گردونه و اگر سیستم عامل بتونه حافظه رو تخصیص بده malloc اشاره گری به ابتدای حافظه در خواست شده بر می گردونه .
توسط تابع free هم حافظه به سیستم عامل برگردونده می شه.
کار برد این مطلب اینه که اگر مقداری از حافظه فقط در یک قسمت کوچکی از برنامه مورد نیاز باشه بهتره که برای اون متغییری تعریف نکنیم .چون متغییر اول برنامه بوجود میاد و آخر برنامه از بین میره .پس مقداری از حافظه که میتونه قابل توجه هم باشه در مدت زیادی از برنامه بدون استفاده باقی بمونه . و این ممکنه که باعث بشه که برنامه به کمبود حافظه مواجه بشه . مخصوصا در نوشتن بازی.
اصلا یکی از قابلیت هایی که دات نت به تقلید از java اضافه کرده garbage collection هستش . یعنی خود برنامه مدیریت حافظه رو بعهده میگیره و متغییرهایی رو که در طی برنامه دیگه استفاده نمیشند رو حذف میکنه . البته این کار دات نت سرعت رو پایین میاره ولی قابلیت رو بالا می بره و البته این امکان هم هست که کد های مدیریت نشده بنویسید که مشکل سرعت رو نداشته باشه و یا می تونید کد های مدیریت شده و نشده رو با هم ترکیب کنید.
کد:
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <process.h>
int main(void)
{
char *str;
/* allocate memory for string */
if ((str = (char *) malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); /* terminate program if out of memory */
}
/* copy "Hello" into string */
strcpy(str, "Hello");
/* display string */
printf("String is %s\n", str);
/* free memory */
free(str);
return 0;
}
در این برنامه هیچ متغییری به جز یک اشاره گر تعریف نشده است . ولی در انتها یک رشته که در حافظه ذخیره شده با کمک اشاره گر چاپ می شه .
در واقع توسط malloc حافظه ای به اندازه 10 کاراکتر از سیستم عامل درخواست می شه اگر حافظه پر باشه malloc مقدار NULL بر می گردونه و اگر سیستم عامل بتونه حافظه رو تخصیص بده malloc اشاره گری به ابتدای حافظه در خواست شده بر می گردونه .
توسط تابع free هم حافظه به سیستم عامل برگردونده می شه.
کار برد این مطلب اینه که اگر مقداری از حافظه فقط در یک قسمت کوچکی از برنامه مورد نیاز باشه بهتره که برای اون متغییری تعریف نکنیم .چون متغییر اول برنامه بوجود میاد و آخر برنامه از بین میره .پس مقداری از حافظه که میتونه قابل توجه هم باشه در مدت زیادی از برنامه بدون استفاده باقی بمونه . و این ممکنه که باعث بشه که برنامه به کمبود حافظه مواجه بشه . مخصوصا در نوشتن بازی.
اصلا یکی از قابلیت هایی که دات نت به تقلید از java اضافه کرده garbage collection هستش . یعنی خود برنامه مدیریت حافظه رو بعهده میگیره و متغییرهایی رو که در طی برنامه دیگه استفاده نمیشند رو حذف میکنه . البته این کار دات نت سرعت رو پایین میاره ولی قابلیت رو بالا می بره و البته این امکان هم هست که کد های مدیریت نشده بنویسید که مشکل سرعت رو نداشته باشه و یا می تونید کد های مدیریت شده و نشده رو با هم ترکیب کنید.