از استک برای اختصاص دادن به استاتیک مموری و از هیپ برای اختصاص دادن به داینامیک مموری استفاده میشه، به هر حال هر دو در Ram ذخیره میشن.
متغیرهای اختصاص داده شده در استک مستقیم در مموری ذخیره و دسترسی به این مموری بسیاری سریع است. پروسه اختصاص یافتن زمانی اتفاق میفته که برنامه اصطلاحا کامپایل شده باشه.
وقتیکه یک فانکشن یا یک متد به عبارتی فانکشن های دیگه ای صدا میزنند که ممکنه فانکشن های دیگه ای هم صدا زنده بشه و و و. اجرای همه ی این فانکشن ها متوقف میشه تا وقیکه دقیقا آخرین فانکشن مقدارش برگرده.
استک همیشه روشش LIFO هستش یعنی چی، خیلی ساده هر چی آخر میاد اول هم میره بیرون.(آخرین بلاکی که رزرو شده دقیقا بلاک بعدی هستش که آزاد خواهد شد). اینطوری خیلی راحت میشه استک دنبالش کرد و فهمیدش. آزادسازی یک بلاک از استک چیزی نیست جز تنظیم کردن یک Pointer
متغیرهای اختصاص داده شده در هیپ مموری اختصاصی خودشون دارند در زمان اجرا و دسترسی به این مموری مقداری کند تر است. اما سایز هیپ فقط محدود به سایز Virtual Memory هستش.
المان هیپ هیچ وابستگی به یکدیگر ندارند و بصورت رندوم قابل دسترس هستند. یک بلاک میتواند در هر زمانی بهش اختصاص داده بشه و در هرزمانی هم آزاد بشه. همین باعث میشه دنبال کردن اینکه کدوم بخش از هیپ اختصاص داده شده یا آزاد هستش سخت بشه.
استک زمانی بهتره استفاده که شما دقیقا میدونید چه مقدار دیتا نیازدارید قبل از کامپایل و در واقع خیلی هم زیاد نیست. از اون طرف اگر نمیدونید چقدر دیتا نیاز هستش در زمان اجرا و مقدار دیتا زیاد هستش بهتره از هیپ استفاده بشه.
در یک موقعیت Multi thread هر یک از ترد ها استک خودشون دارند اما اونا هیپ share میکنند.