فرق یا تفاوت بین تابع malloc و calloc در زبان سی پلاس پلاس_اختصاص حافظه پویا در سی
جمعه, ۱۶ مهر ۱۳۹۵، ۰۴:۲۲ ق.ظ
gameover.blog.ir
نام تابع | توضیح |
---|---|
malloc | یک مقدار مشخص از حافظه را به برنامه اختصاص میدهد. |
realloc | حافظهای که قبلاً اختصاص یافته را افزایش یا کاهش میدهد. ممکن است احتیاج باشد حافظه دوباره اختصاص یابد. |
calloc | مقدار مشخصی از حافظه را اختصاص میدهد. اما آنها را با صفر مقداردهی میکند. |
free | حافظه اختصاص یافته را آزاد میکند و به سیستم باز میگرداند |
مثال:
دستور زیر آرایه از ۱۰ عدد صحیح ایجاد میکند:
int array[10];
با این حال اندازه آرایه در زمان کامپایل مشخص میشود و ثابت است و در مان اجرا نمیتواند تغییر کند. برای اختصاص دادن یک آرایه با اندازه مشابه به صورت پویا میتوان از این کد استفاده کرد:
/* Allocate space for an array with ten elements of type int. Some programmers place an optional "(int *)" cast before malloc. */
int * array = malloc(10 * sizeof(int));
/* Check if the memory couldn't be allocated; if it's the case, handle the problem as appropriate. */
if (NULL == array) {
/* Handle error… */
}
/* If we get here, allocation succeeded. Do work… */
/* We are done with the array, and can free (release) the block of memory. */
free(array);
/* Make sure the freed pointer isn't used anymore by assigning it to NULL (or another allocated memory region). */
array = NULL;
در صورتیکه malloc موفق نشود حافظه خواسته شده را اختصاص دهد، مقدار NULL را برمیگرداند.
malloc یک اشاره گر void برمیگرداند. بدین معنی که این اشاره گر به فضایی با نوع داده نامشخص اشاره میکند. در سی ++ باید با استفاده از عملگر cast این اشاره گر را به نوع داده مورد نیاز تبدیل کرد. اما در زبان سی به این کار احتیاج نیست.
نکته های اضافی:
m به معنی memory یا حافظه می باشد.
alloc به معنی allocation یا اختصاص می باشد.
malloc یعنی memory allocation یا اختصاص حافظه موقع اجرا(این کار باعث میشه طول آرایه رو در لحظه ی تعریف،تعیین نکنیم و فقط در لحظه ی اجرا به میزان لازم و به تعداد ورودی ها تعریفش کنیم. به این کار می گن اختصاص حافظه پویا یا داینامیک مموری الوکیشن)
منبع: ویکی پدیا
۹۵/۰۷/۱۶