ساختار حافظه در برنامه های مبتنی بر دات نت

ساختار حافظه در برنامه های مبتنی بر دات نت

بدون دیدگاه

ساختار حافظه در برنامه های مبتنی بر دات نت چگونه است؟

درک ساختار حافظه در برنامه های مبتنی دات نت اهمیت بسیار بالایی دارد. به عنوان یک برنامه نویس باید تقسیم بندی Data Memory را خوب درک کنید. این مطلب به شما کمک می کند بتوانید انواع داده ها، اعم از Reference Type و Value Type ها را به خوبی بشناسید. برای برنامه های مبتنی بر دات نت دو بخش در Data Memory برای نگهداری داده ها و متغییر ها در نظر گرفته شده است. دات نت Application Data Memory را به دو بخش Stack و Heap تقسیم کرده و هر بخش خصوصیات مربوط به خود را دارد.

معرفی Stack

Stack بخش کوچکتری از حافظه به نسبت Heap می‌باشد. به آن دسترسی مستقیم داریم و ساختار آن از نوع LIFO می‌باشد. (برای اطلاعات بیشتر می توانید مطلب: حافظه های LIFO و FIFO – کاربردها و تفاوت‌ها را مطالعه نمایید). فضای خالی این حافظه برای اجرای برنامه بسیار اهمیت دارد. بنابراین برای نگهداری داده هایی با حجم کم و استفاده موقتی مناسب می‌باشد.

متغییر های تعریف شده (چه Reference Type و چه Value Type) در این بخش از حافظه نگداری می‌شوند. به مثال زیر توجه کنید. در این تصویر فضا های حافظه مشحص شده و تعریف و مقدار دهی اولیه یک متغییر از نوع Value Type در آن نمایش داده شده است:

ساختار حافظه در برنامه های مبتنی بر دات نت و تعریف Value Type ها

دقت کنید این الزاما به معنی وجود دیتای مترادف این متغییر ها در Stack نمی‌باشد. مقدار متغییر های Value Type نیز در Stack نگهداری می‌شوند. ولی دیتای اشیاء ساخته شده از انواع Reference Type نیاز به فضای بیشتری دارد. از آنجا که این اشیاء قابلیت استفاده مجدد دارند، نمی‌توان آنها را در Stack نگهداری کرد. بنابراین به فضای بیشتری از حافظه که مجزا از Stack باشد برای این کار نیاز داریم. این فضا توسط بخشی به نام Heap تامین می‌شود.

معرفی Heap

Heap فضایی بزرگتر از Stack می‌باشد. به این فضا دسترسی مستقیم نداریم. مدیریت حافظه Heap بر عهده دات نت می‌باشد. اشیاء ساخته شده از نوع Reference Type در این بخش از Application Data Memory نگهداری می‌شوند. بخشی از دات نت به نام Garbage Collection وظیفه آزاد کردن فضاهای بلااستفاده در Heap را به عهده دارد. (برای آشنایی بیشتر با اجزاء اصلی دات نت، مطلب: دات نت چیست و چگونه عمل می کند را مطالعه نمایید)

وقتی متغییری از نوع Reference Type تعریف می‌شود، فضایی در Stack به متغییر اختصاص می‌یابد. سپس حین نمونه سازی، شیء جدید در Heap ایجاد شده و آدرس آن بخش از Heap در متغییر مترادف (در Stack) قرار می‌گیرد. به این صورت عملا ما به آدرس شیء ساخته شده دسترسی داریم. به مثال زیر توجه کنید:

ساختار حافظه در برنامه های دات نت و تعریف Reference Type

در این مثال، ابتدا متغییر تعریف شده و سپس نمونه سازی انجام می‌شود. نمونه ای از کلاس Person در Heap ساخته شده و آدرس آن در  متغییر P در Stack قرار می‌گیرد. دسترسی به اشیاء موجود در Heap به روش غیر مستقیم و با کمک آدرس یا Reference آنها ممکن است.

آواتار کاربر

شهاب ساری اصلانی

از سال 1385 به صورت جدی مشغول تدریس در حوزه های برنامه نویسی دات نت و طراحی بانک های اطلاعاتی بوده ام. تدریس به عنوان یک حرفه همیشه برایم جذاب بوده و یادگیری جدیدترین مباحث لذت بخش است.

ارسال یک دیدگاه

آدرس ایمیل شما منتشر نخواهد شد.