تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف يعمل البرنامج في الذاكرة
#1
بسم الله الرحمن الرحيم 
شرح تفصيلي لتخطيط الذاكرة لبرنامج C للمبتدئين
كيفية تخزين مكونات البرنامج في الذاكرة عند تنفيذ برنامج مكتوب بلغة C. يتم تقسيم الذاكرة إلى عدة أقسام يتم تخصيصها لكل نوع من البيانات والكود البرمجي بشكل محدد. فيما يلي شرح مفصل لتلك الأقسام:
  1. Stack :
    • الوظيفة:
      يتم تخصيص الذاكرة للدوال والمتغيرات المحلية داخلها في هذا القسم. يتم تخصيص الذاكرة تلقائيًا عندما يتم استدعاء دالة ويتم تحريرها عند انتهاء الدالة.
    • المتغيرات المحلية:
      في البرنامج الموضح، المتغيرات المحلية داخل الدالة
       
      main()
      
      Plain text
      مثل
       
      int main()
      
      Plain text
      ومكوناتها يتم تخزينها على الـ Stack.
  2. Heap :
    • الوظيفة:
      يتم تخصيص هذه الذاكرة ديناميكيًا باستخدام دوال مثل
       
      malloc()
      
      Plain text
      ، ويستخدم لتخزين البيانات التي يمكن أن تتغير أثناء تنفيذ البرنامج. لا يتم ذكر أو توضيح الـ Heap في هذه الصورة لأن البرنامج لا يستخدم تخصيص ديناميكي.
  3. BSS (Uninitialized Data Section):
    • الوظيفة:
      هذا القسم يتم تخصيصه للمتغيرات غير المهيأة (التي لم تُعطَ قيمة ابتدائية). أي متغيرات معرفة ولكن لم يتم إعطاؤها قيمة تخزن في هذا القسم.
    • المتغيرات غير المهيأة:
      في الصورة، المتغير
       
      int a;
      
      Plain text
      لم يتم إعطاؤه قيمة ابتدائية، لذا يتم تخزينه في قسم BSS.
  4. Data (Initialized Data Section):
    • الوظيفة:
      هذا القسم يُستخدم لتخزين المتغيرات المهيأة (التي أُعطيت قيمة ابتدائية). جميع المتغيرات التي تم إعطاؤها قيمًا ابتدائية عند تعريفها يتم تخزينها هنا.
    • المتغيرات المهيأة:
      المتغير
       
      int b = 4;
      
      Plain text
      يتم تخزينه في قسم البيانات المهيأة
       
      .data
      
      Plain text
      لأنه تم إعطاؤه قيمة ابتدائية.
  5. Text (Executable Code Section):
    • الوظيفة:
      هذا القسم يحتوي على الكود البرمجي الفعلي الذي سيتم تنفيذه من قبل المعالج. يتم تخزين تعليمات التنفيذ الخاصة بالبرنامج في هذا القسم، وهو قسم مخصص للقراءة فقط.
    • الكود التنفيذي:
      تعليمات الكود مثل
       
      main()
      
      Plain text
      و
       
      return 0;
      
      Plain text
      يتم تخزينها في قسم الـ
       
      .text
      
      Plain text
      .
ملخص:عند تشغيل البرنامج، يتم تقسيم مكونات البرنامج في الذاكرة كالتالي:
  • المتغيرات المحلية للدوال يتم تخزينها في Stack.
  • المتغيرات غير المعرفه يتم تخزينها في BSS.
  • المتغيرات التى تم تعرفها يتم تخزينها في Data.
  • الكود التنفيذي يتم تخزينه في Text.
[صورة مرفقة: aGRA3Rx.png]
 


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم