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

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

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

همان طورکه می دانید از دید یک برنامه دو نوع حافظه وجود دارد
شاید بپرسید که منظور از دو نوع حافظه چیست ؟
منظور من حافظه اصلی یا همان RAM  است
از دید یک برنامه دو نوع حافظه در دسترس است که عبارتند از   Stack  و Heap
حافظه Stack به محلی از حافظه کامپیوتر اطلاق میشود
که درزمان اجرای برنامه توسط خود برنامه مشخص میشود و Heap به مابقی حافظه باقیمانده کامپیوتر گفته میشود

نکـــــــته
در برنامه های تحت ویندوز حافظه Heap  شامل حافظه مجازی یا Virtual Memory نیز است

درصورتی که حافظه موردنیاز یک متغییر یا شی از حافظه Stack تامین شود
به آن تخصیص حافظه محلی یا Local alloction گفته میشود
هم چنین درصورتی که حافظه مودرنیاز یک متغییر یا شی از حافظه Heap تامین شود
به ان تخصیص حافظه پویا یا Daynamic allocation گفته میشود

در مواقعی که برنامه به حافظه ای برای مواردی نظیر متغییر های محلی فراخوانی توابع و نظایر آن نیاز داشته باشد
از حافظه Stack استفاده خواهد شد چنین حافظه هایی در مواقع لزوم تخصیص داده شده
و در زمانی که مورد نیاز نباشد آزاد میشوند
برای مثال زمانی که برنامه به یک تابع وارد میشود از حافظه Stack استفاده کرده
و درموقع خروج از تابع حافظه مربوط را آزاد میکند
توجه داشته باشیدکه این عملیات به صورت خودکار صورت میگیرد و نیازی نیست که شما نگران نحوه انجام آن باشید

تخصیص حافظه محلی داراری مزایا و معایبی است
مزیت آن این است که تخصیص حافظه Stack بسیار سریع است
و عیب اصلی آن این است که اندازه حافظه Stack ثابت است
و در زمان اجرای برنامه تعیین شده و در حین اجرای برنامه غیر قابل تغییر است
در صورتی که برنامه شما با پر شدن Stack روبرو شود
اتفاقات غیر منتظره ای رخ خواهد داد
برای مثال ممکن است برنامه کرش Crach کند
رفتارهای غریبی بروز دهد یا حتی رفتار عادی  داشته باشد
اما بعد از خاتمه برنامه Crach کرش کند
با توجه به این که در برنامه نویسی 32 بیتی  (نسبت به برنامه 16 بیتی) احتمال پر شدن Stack کمتر است اما باز هم وجود دارد
توجه داشته باشید که برای مواردی نظیر متغییرهایی که ازنوع های داده ای از پیش تعبیه شده (نظیر Integer ) استفاده می کنند
یا حتی آرایه های کوچک روش تخصیص حافظه محلی (یعنی استفاده Stack ) روش مناسبی تر است
اما در مواردی نظیر استفاده از رکورد های بزرگ تخصیص حافظه پویا ( یعنی استفاده Heap ) مناسب تر است
حافظه Heap شامل تمامی حافظه آزاد RAM  به اضافه تمامی حافظه آزاد هارددیسک ( در برنامه های تحت ویندوز ) است
به طور خلاصه این که حافظه Heap در سیستم عامل ویندوز معمولا 100 مگابایت خواهد بود
تعجب کرده اید مطمئنا پاسخ شما مثبت است و این مقدار حافظه زیادی است اما توجه داشته باشید
که تخصیص حافظه پویا یک عیب کوچک دارد
تخصیص حافظه پویا ( نسبت استفاده از Heap )  نیاز به عملیت سربار اضافی دارد
که باعث میشود عمل تخصیص حافظه ( نسبت به استفاده از Stack )  کمی کندتر صورت پذیرد
توجه داشته باشیدکه در اغلب برنامه ها این کندی محسوس نخواهد بود
حال این ایده به ذهن شما خطور کرده است که بهتر است در اغلب موارد از Heap استفاده کنیدایده جالبی است
اما توجه داشته باشید که تخصیص حافظه پویا نیاز به کمی کار بیشتر از طرف شما دارد

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

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

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

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