تخصيص الذاكرة على المكدس
افهم آلية عمل التخزين التلقائي
تخصيص الذاكرة على المكدس درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
التخزين التلقائي
تعيش المتغيرات المحلية في التخزين التلقائي، الذي يُسمّى عادةً المكدس. ويُنشأ هذا المتغير عند دخول التنفيذ إلى نطاقه، ويُدمّر عند مغادرته.
#include <iostream>
int main() {
int x = 42; // on the stack
double pi = 3.14; // on the stack
std::cout << x << " " << pi << "\n";
}ينمو المكدس وينكمش
يضع كل استدعاء دالة إطار مكدس يحتوي على متغيراته المحلية. وعند عودة الدالة، يُزال الإطار وتختفي المتغيرات المحلية، من دون الحاجة إلى تنظيف يدوي.
#include <iostream>
void greet() {
int local = 7; // pushed on call
std::cout << local << "\n";
} // popped on return
int main() { greet(); }ترتيب LIFO
يعمل المكدس وفق مبدأ الأخير دخولًا، الأول خروجًا. ويكون المتغير المحلي الذي أُنشئ أخيرًا هو أول ما يُدمّر عند انتهاء النطاق.
#include <iostream>
int main() {
int a = 1;
{
int b = 2; // created after a
std::cout << b << "\n";
} // b destroyed first
std::cout << a << "\n";
}سريع وقليل التكلفة
يُعد تخصيص الذاكرة على المكدس سريعًا للغاية، إذ لا يتطلب سوى تحريك مؤشر المكدس. فلا يوجد بحث عن ذاكرة حرة ولا إدارة سجلات كما يتطلب الكومة.
النطاق يحدد مدة الحياة
لا يبقى كائن المكدس حيًا إلا داخل الكتلة التي أُعلن فيها. وللكتل المتداخلة نطاقها الخاص.
#include <iostream>
int main() {
for (int i = 0; i < 3; ++i) {
int square = i * i; // recreated each iteration
std::cout << square << "\n";
}
}حجم محدود
للمكدس حجم ثابت ومحدود، غالبًا بضعة ميغابايتات. وقد يؤدي تخصيص مصفوفات ضخمة على المكدس إلى تعطل البرنامج بسبب تجاوز سعة المكدس.
// Risky: a large fixed array on the stack
int big[1000000]; // may overflow the stackإعادة عنوان من المكدس خطأ
لا تُعد أبدًا مؤشرًا أو مرجعًا إلى متغير محلي. فعند عودة الدالة، يزول ذلك التخزين ويصبح المؤشر معلّقًا.
int* bad() {
int local = 5;
return &local; // BUG: local dies here
}مرّر الكائنات الكبيرة بالمرجع
يُعد نسخ الكائنات الكبيرة إلى المكدس إهدارًا للموارد. مرّرها باستخدام const& لتجنّب النسخ مع إبقاء استخدام المكدس منخفضًا.
#include <string>
void print(const std::string& s) { // no copy
// use s
}كائنات المكدس لا تحتاج إلى delete
بما أن المصرّف يدير عمرها تلقائيًا، يجب ألا تستدعي delete مطلقًا على متغير موجود في المكدس.
#include <iostream>
int main() {
int n = 10;
// delete &n; // ERROR: not heap-allocated
std::cout << n << "\n";
}المصفوفات على المكدس
توجد المصفوفات ذات الحجم الثابت والطول المعروف على المكدس، ويُحرَّر مكانها تلقائيًا عند انتهاء النطاق.
#include <iostream>
int main() {
int values[3] = {10, 20, 30};
for (int v : values) std::cout << v << "\n";
}متى تفضّل المكدس
فضّل المكدس للكائنات الصغيرة قصيرة العمر التي يُعرف حجمها وقت الترجمة. فهو أسرع وينظّف نفسه تلقائيًا — ولا تلجأ إلى الكومة إلا عند الحاجة الفعلية إليها.
اختبار سريع
اختبر مدى فهمك لتخصيص الذاكرة على المكدس.
مراجعة
تعلّمت أن تخصيص الذاكرة على المكدس يستخدم تخزينًا تلقائيًا مرتبطًا بالنطاق: تُنشأ المتغيرات عند الدخول وتُدمَّر عند الخروج بترتيب الوارد أخيرًا يخرج أولًا (LIFO). وهو سريع وينظّف نفسه تلقائيًا، لكنه محدود الحجم. لا تُعد عناوين المتغيرات المحلية مطلقًا، ولا تستدعِ delete مطلقًا على كائنات المكدس.
الأسئلة الشائعة
هل درس «تخصيص الذاكرة على المكدس» مجاني؟
نعم — نص درس «تخصيص الذاكرة على المكدس» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «تخصيص الذاكرة على المكدس»؟
افهم آلية عمل التخزين التلقائي تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «تخصيص الذاكرة على المكدس»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تخصيص الذاكرة على المكدس
- تخصيص الذاكرة على الكومة باستخدام new/delete
- دورة حياة الكائن
- أخطاء الذاكرة الشائعة