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

تخصیص حافظه پویا و اشارهگرها در پاسکال شیگرا
در یک برنامه پاسکال شیگرا تخصیص حافظه پویا به چند روش مختلف امکان پذیر است
بهترین روش استفاده از تابع 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 برای مشخص کردن اشاره گری که فاقد مقدار است استفاده میشود |
MyPointer := nil;
هم چنین شما میتوانید برسی کنید که آیا تخصیص حافظه صورت گرفته است
if MyPointer := nil then MyPointer := AllocMem(Size);