স্ট্যাক (The stack) - ফাংশনের ভিতরে ডিক্লেয়ার করা সব ভেরিয়েবল স্ট্যাক থেকে মেমরি নেয়। তাই একটি ফাংশনের ভিতরে যেকোনো লোকাল ভেরিয়েবল স্ট্যাকে বাস করে।
হিপ (The heap) - এটি প্রোগ্রামের অনব্যবহৃত মেমরি যা প্রোগ্রাম রান হলে ডাইনামিকভাবে মেমরি অ্যালোকেট করতে ব্যবহার করা হয়। তাই যদি আমরা কোনো জিনিস ফাংশনটি শেষ হওয়ার পরও জীবিত রাখতে চাই, তবে সেটি হিপে অ্যালোকেট করতে হবে।
উদাহরণ কোড
int main() {
int a; // স্ট্যাকে মেমরি অ্যালোকেট
int *ptr = new int[7]; // ৭টি ইন্টিজারের জন্য হিপে মেমরি অ্যালোকেট
}
হিপ মেমরির মূল সমস্যা হলো ফ্র্যাগমেন্টেশন (fragmentation), আর স্ট্যাকে মেমরি সংকটের সমস্যা বেশি দেখা যায়। হিপে মেমরি আকার পরিবর্তন করা যায়, কিন্তু স্ট্যাকে সেটি সম্ভব নয়।