پارسا صفوی
برنامه نویس وب

معرفی مفاهیم Heap و Stack در سی شارپ : Boxing و Unboxing سی شارپ

زمانی که در زبان سی شارپ متغیری مثلا از نوع int تعریف می کنیم این متغیر و مقدار آن به صورت مستقیم داخل حافظه ی Stack ذخیره می شوند و دسترسی ما به مقدار آن متغیر، به طور مستقیم از داخل حافظه Stack می باشد، اما زمانی که شئ ای از نوع یک کلاس ایجاد می کنیم، خانه ای برای آن متغیر در حافظه ی Stack ایجاد شده و شئ مربوط به آن متغیر در حافظه ی Heap ذخیره میشود، سپس در قسمت مربوط به متغیر در حافظه ی Stack ، آدرس شئ ایجاد شده در حافظه ی Heap ذخیره می شود. اصطلاحاً به مورد اول Value Type و به مورد دوم Reference Type می گویند.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
سرفصل های این مطلب
  1. Boxing و Unboxing

برای یادگیری و آموزش سی شارپ ( آموزش برنامه نویسی سی شارپ ) حرفه ای به این لینک مراجعه کنید

StackAndHeap

اما شیوه دسترسی به متغیرهای Value Type و Reference Type چگونه است؟ زمانی که ما قصد دسترسی به متغیری از نوع Value Type را داریم، مقدار آن به صورت مستقیم از داخل حافظه ی Stack خوانده می شود، اما برای متغیرهای Reference Type، ابتدا به Stack رفته و پس از خواندن آدرس آن در Heap، به حافظه Heap مراجعه شده و شئ مربوط به آن خوانده می شود. با این تفاسیر، وقتی متغیری از نوع Reference Type (متغیر هایی که در Heap ذخیره می شوند ) را معادل متغیر دیگری قرار می دهیم، قسمت جدیدی برای آن در حافظه Stack ایجاد شده و آدرس متغیر قبلی را داخل آن قرار می دهد. این بدین معناست که اگر هر کدام از پارامترهای متغیرها تغییر کنند، متغیر دیگر هم تغییر می کند.

stackAndHeap

Boxing و Unboxing

هر مقداری که داخل شئ ای از نوع Object قرار داده شود، در حقیقت تبدیل به Reference Type می شود. در زبان ساده Boxing و Unboxing به معنای تغییر نوع داده ی متغیر ها ی Value Types و Reference Types به همدیگر است. با یک مثال ساده بررسی می کنیم:

Boxing:

Int id = 1;
Object Id = id;

Unboxing:

O = 123;
Int I = int(O);

با این روش می توان متغیر هایی از نوع Value Type را از حافظه ی Stack به حافظه ی Heap منتقل کرد.استفاده از این روش ها باعث پایین آمدن کارایی یا Performance برنامه می شود، پس تا حد امکان از این کار پرهیز کنید.


پارسا صفوی
پارسا صفوی

برنامه نویس وب

طراح و برنامه نویس Full-Stack وب

نظرات