15-10-2024, 05:07 PM
(آخر تعديل لهذه المشاركة : 15-10-2024, 05:08 PM بواسطة AngixBlack.)
بسم الله الرحمن الرحيم
شرح تفصيلي لتخطيط الذاكرة لبرنامج C للمبتدئين
كيفية تخزين مكونات البرنامج في الذاكرة عند تنفيذ برنامج مكتوب بلغة C. يتم تقسيم الذاكرة إلى عدة أقسام يتم تخصيصها لكل نوع من البيانات والكود البرمجي بشكل محدد. فيما يلي شرح مفصل لتلك الأقسام:
كيفية تخزين مكونات البرنامج في الذاكرة عند تنفيذ برنامج مكتوب بلغة C. يتم تقسيم الذاكرة إلى عدة أقسام يتم تخصيصها لكل نوع من البيانات والكود البرمجي بشكل محدد. فيما يلي شرح مفصل لتلك الأقسام:
- Stack :
- الوظيفة:
يتم تخصيص الذاكرة للدوال والمتغيرات المحلية داخلها في هذا القسم. يتم تخصيص الذاكرة تلقائيًا عندما يتم استدعاء دالة ويتم تحريرها عند انتهاء الدالة.
- المتغيرات المحلية:
في البرنامج الموضح، المتغيرات المحلية داخل الدالة
مثلmain()
ومكوناتها يتم تخزينها على الـ Stack.int main()
- الوظيفة:
- Heap :
- الوظيفة:
يتم تخصيص هذه الذاكرة ديناميكيًا باستخدام دوال مثل
، ويستخدم لتخزين البيانات التي يمكن أن تتغير أثناء تنفيذ البرنامج. لا يتم ذكر أو توضيح الـ Heap في هذه الصورة لأن البرنامج لا يستخدم تخصيص ديناميكي.malloc()
- الوظيفة:
- BSS (Uninitialized Data Section):
- الوظيفة:
هذا القسم يتم تخصيصه للمتغيرات غير المهيأة (التي لم تُعطَ قيمة ابتدائية). أي متغيرات معرفة ولكن لم يتم إعطاؤها قيمة تخزن في هذا القسم.
- المتغيرات غير المهيأة:
في الصورة، المتغير
لم يتم إعطاؤه قيمة ابتدائية، لذا يتم تخزينه في قسم BSS.int a;
- الوظيفة:
- Data (Initialized Data Section):
- الوظيفة:
هذا القسم يُستخدم لتخزين المتغيرات المهيأة (التي أُعطيت قيمة ابتدائية). جميع المتغيرات التي تم إعطاؤها قيمًا ابتدائية عند تعريفها يتم تخزينها هنا.
- المتغيرات المهيأة:
المتغير
يتم تخزينه في قسم البيانات المهيأةint b = 4;
لأنه تم إعطاؤه قيمة ابتدائية..data
- الوظيفة:
- Text (Executable Code Section):
- الوظيفة:
هذا القسم يحتوي على الكود البرمجي الفعلي الذي سيتم تنفيذه من قبل المعالج. يتم تخزين تعليمات التنفيذ الخاصة بالبرنامج في هذا القسم، وهو قسم مخصص للقراءة فقط.
- الكود التنفيذي:
تعليمات الكود مثل
وmain()
يتم تخزينها في قسم الـreturn 0;
..text
- الوظيفة:
- المتغيرات المحلية للدوال يتم تخزينها في Stack.
- المتغيرات غير المعرفه يتم تخزينها في BSS.
- المتغيرات التى تم تعرفها يتم تخزينها في Data.
- الكود التنفيذي يتم تخزينه في Text.