حافظه های هیپ به زبان ساده به همراه مثال
به غیر ازData , Code , Stack , محل دیگری هم برای تخصیص حافظه بکار می رود که به آنHeap می گوییم. وقتی که توسط دستوراتی مثل malloc یا alloc یا ... حافظه ای را از سیستم میگیریم , این حافظه در هیپ سیستم اختصاص داده میشود.در واقع از هیپ برای تخصیص حافظه به صورت دینامیک استفاده میشود.
این نکته هم باید ذکر شود که در هر برنامه ای لزوما هیپ نداریم و وجود آن بستگی دارد به زبانی که برای برنامه نویسی استفاده شده است.
به طور استاندارد دو نوع هیپ برای برنامه در نظر گرفته میشود که عبارتند از :
Near Heap و Far Heap
اندازه Near heap محدود به 32 کیلوبایت است و برای رفع محدودیت از Far heap
استفاده میشود و تفاوت آنها در نحوه آدرس دهی است.
طرف حساب ما متغیرهای نوع دینامیک هستند که در پشته سیستم ادرس دهی میشوند
در زیر مثالی از دونوع برنامه به زبان C اورده ایم که در مثال اول نحوه ذخیره متغیر در Stack و در مثال دوم نحوه استفاده و ذخیره در Heap بیان شده است
//On Stack
#include <stdio.h>
double multiplyByTwo (double input) {
double twice = input * 2.0;
return twice;
}
int main (int argc, char *argv[])
{
int age = 30;
double HsValue = 12345.67;
double myList[3] = {1.2, 2.3, 3.4};
printf("double your salary is %.3f\n", multiplyByTwo(salary));
return 0;
}
//Result : double your salary is 24691.340
2- Heap
//on heap
#include <stdio.h>
#include <stdlib.h>
double *multiplyByTwo (double *input) {
double *twice = malloc(sizeof(double));
*twice = *input * 2.0;
return twice;
}
int main (int argc, char *argv[])
{
int *age = malloc(sizeof(int));
*age = 30;
double *salary = malloc(sizeof(double));
*salary = 12345.67;
double *myList = malloc(3 * sizeof(double));
myList[0] = 1.2;
myList[1] = 2.3;
myList[2] = 3.4;
double *twiceSalary = multiplyByTwo(salary);
printf("double your salary is %.3f\n", *twiceSalary);
free(age);
free(salary);
free(myList);
free(twiceSalary);
return 0;
}