ویدئو های پربازدید سایت

حافظه های هیپ به زبان ساده به همراه مثال


به غیر ازData ,  Code , Stack , محل دیگری هم برای تخصیص حافظه بکار می رود که به آنHeap  می گوییم. وقتی که توسط دستوراتی مثل malloc یا alloc یا ... حافظه ای را از سیستم میگیریم , این حافظه در هیپ سیستم اختصاص داده میشود.در واقع از هیپ برای تخصیص حافظه به صورت دینامیک استفاده میشود.
این نکته هم باید ذکر شود که در هر برنامه ای لزوما هیپ نداریم و وجود آن بستگی دارد به زبانی که برای برنامه نویسی استفاده شده است.
به طور استاندارد دو نوع هیپ برای برنامه در نظر گرفته میشود که عبارتند از :

Near Heap و Far Heap

اندازه Near heap محدود به 32 کیلوبایت است و برای رفع محدودیت از Far heap

استفاده میشود و تفاوت آنها در نحوه آدرس دهی است.
طرف حساب ما متغیرهای نوع دینامیک هستند که در پشته سیستم ادرس دهی میشوند

هیپ,حافظه هیپ,Heap,تفاوت حافظه های هیپ با stack,stack,حافظه stack,use Heap,malloc

 در زیر مثالی از دونوع برنامه به زبان 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;
}



cleocin cream cleocin cream cleocin ovuli
در صورتی که سوالی راجع به این آموزش دارید در بخش نظرات همین پست مطرح و از ارسال ان از بخش ارتباط با ما خود داری نمائید

ویدئو های مرتبط



;

gnlsrmig پاسخ

1 1396/10/19 17:7

vvckwoyg پاسخ

1 1396/10/19 17:7