آموزش پاسکال شی‌گرا

تخصیص حافظه پویا و اشاره‌گرها در پاسکال شی‌گرا

تخصیص حافظه پویا و اشاره‌گرها در پاسکال شی‌گرا

در یک برنامه پاسکال شی‌گرا تخصیص حافظه پویا به چند روش مختلف امکان پذیر است
بهترین روش استفاده از تابع AllocMem است
تابع AllocMem حافظه ای را تخصیص داده و آن را با صفر پر میکند
برای مثال در قسمت های قبلی رکوردی با عنوان TStudent را معرفی کردیم
در برنامه زیر از تخصیص حافظه محلی برای تخصیص حافظه به رکورد استفاده شده است

type 
 PStudent = ^TStudent;
 TSudent = record
 Name : String[20];
 Family : String[30];
 end;

Var
 Student : TSudent:
begin
 Student.Nmae := 'Wiki';
  Student.Family := 'Delphi';
end;

در این برنامه از تخصیص حافظه پویا استفاده شده است

type 
 PStudent = ^TStudent;
 TSudent = record
 Name : String[20];
 Family : String[30];
 end;

Var
 Student : TPSudent:
begin
 Student := Allocem(SizeOf(TSydent));
  Student.Nmae := 'Wiki';
  Student.Family := 'Delphi';
 FreeMen(Student);
end;

توجه داشته باشید که در برنامه فوق متغییری از نوع PStudent مورد استفاده قرار گرفته است
در حقیقت PStudent اشاره گری به TStudent است
هم چنین توجه داشته باشید که از تابع AllocMem برای تخصیص حافظه استفاده شده است
پارامرتی که به تابع AllocMem ارسال شده است
شامل اندازه حافظه موردنیاز است در حقیقت تابع SizeOf اندازه رکورد را مشخص میکند
لذا از آن برای تعیین مقدار حافظه مورد نیاز استفاده شده است
فراخوانی تابع AllocMem  باعث تخصیص حافظه شده و نمونه ای از رکورد TStudent  درون حافظه Heap ایجاد و اشاره گر را با آن مقداردهی میکند
بعد از این که حافظه تخصیص داده میشود شما میتوانید از متغییر اشاره گر همانند یک متغییر واقعی استفاده کنید
در خاتمه توجه داشته باشیدکه بعد از استفاده شی ایجاده شده
برنامه با فراخوانی پروسیجر FreeMem باعث آزاد کردن حافظه مربوط میشود
اشاره به این نکته ضرورری است که اگر حافظه موردنظر را آزاد نکنید
حافظه مروبطه به صورت بلااستفاده باقی خواهد ماند

نکــــــــته
توجه داشته باشید که تخصیص حافظه پویا در رابطه با رکوردها و آرایه ها اختیاری است
اما رابط با کلاس ها اجباری خواهد بود در رابطه با کلاس ها در پست های آینده هیمن بخش توضیح خواهم داد

اکنون با تخصیص حافظه پویا آشنا شده اید اما مطمئن هستم که علاقه زیادی به استفاده از آن پیدا نکرده اید
توجه داشته باشید که در بعضی موارد ضرورت دارد که ازتخصیص حافظه پویا استفاده کنید
لذا باید نحوه انجام این عمل را بدانید

 

 

نکــــــــته

از کلمه کلیدی nil  برای مشخص کردن اشاره گری که فاقد مقدار است استفاده میشود
اگر شما بخواهید مقدار یک اشاره گر را حذف کنید میتوانید از کلمه کلیدی nil استفاده کنید

MyPointer := nil;

هم چنین شما میتوانید برسی کنید که آیا تخصیص حافظه صورت گرفته است

if MyPointer := nil
 then MyPointer := AllocMem(Size);

 

[adinserter block="1"]
5/5 - (3 امتیاز)

نوشته های مشابه

دیدگاهتان را بنویسید

دکمه بازگشت به بالا