تكرار السؤال: …
الإجابة المختصرة
الـ Stack هو مساحة ذاكرة خطية سريعة جداً تُدار تلقائياً بواسطة المعالج لتخزين المتغيرات المحلية وإطارات الدوال، بينما الـ Heap مساحة ديناميكية ضخمة لحجز كائنات متغيرة الحجم يديرها المبرمج أو جامع القمامة (GC).
الشرح
يتحرك مؤشر الـ Stack بمجرد زيادة أو إنقاص سجل المؤشر (Stack Pointer) مع دخول وخروج الدوال؛ تخصيصها لحظي وتحريرها تلقائي ومحمي من التجزئة، لكن حجمها محدود وأي تجاوز يسبب Stack Overflow. أما الـ Heap فيتطلب البحث عن كتلة حرة وحجزها (malloc/new)، وهي أبطأ بكثير وعرضة لتجزئة الذاكرة (Memory Fragmentation) وتتطلب إدارة واعية لمنع تسريب الذاكرة.
مثال بالكود
// المتغيرات المحلية الصغيرة على الـ Stack:
int count = 42;
// الكائنات الديناميكية على الـ Heap مع مؤشر محلي على الـ Stack:
User* user = new User('Alice');أخطاء شائعة
- الاعتقاد بأن لغات الـ Managed مثل Java و C# و JavaScript لا تستخدم الـ Stack؛ جميع اللغات تستخدم الـ Stack لإطارات الاستدعاء والمتغيرات الأولية.