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


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


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