Stack - ตัวแปรที่ประกาศภายในฟังก์ชันจะใช้หน่วยความจำจาก Stack ดังนั้น ตัวแปรท้องถิ่น (local variable) ภายในฟังก์ชันจะอยู่บน Stack
Heap - หน่วยความจำที่ยังไม่ได้ใช้ของโปรแกรม และสามารถใช้จัดสรรหน่วยความจำแบบไดนามิกขณะรันโปรแกรม ดังนั้น หากเราต้องการให้สิ่งใดมีอายุยาวกว่าฟังก์ชันที่ประกาศมัน เราต้องจัดสรรบน Heap
ตัวอย่างโค้ด
int main() {
int a; // จองหน่วยความจำบน stack
int *ptr = new int[7]; // จองหน่วยความจำสำหรับ 7 integers บน heap
}
ปัญหาหลักของหน่วยความจำ Heap คือการแยกส่วน (fragmentation) ในขณะที่ปัญหาขาดหน่วยความจำมักพบบน Stack ขนาดหน่วยความจำบน Heap สามารถเปลี่ยนแปลงได้ แต่ Stack ไม่สามารถเปลี่ยนแปลงได้