مقطع البيانات
في مجال الحوسبة ، يُعرَّف مقطع البيانات (ويُشار إليه غالبًا بـ .data ) بأنه جزء من ملف الكائن أو مساحة العناوين المقابلة له في البرنامج، ويحتوي على متغيرات ثابتة مُهيأة ، أي متغيرات عامة ومتغيرات محلية ثابتة . ويُحدد حجم هذا المقطع بناءً على حجم القيم في شفرة المصدر للبرنامج، ولا يتغير أثناء التشغيل .
يُعدّ قسم البيانات قابلاً للقراءة والكتابة، حيث يمكن تغيير قيم المتغيرات أثناء التشغيل. وهذا على عكس قسم البيانات للقراءة فقط (يحتوي قسم البيانات الثابتة (.rodata) على ثوابت ثابتة بدلاً من المتغيرات؛ وهو يختلف عنقسم التعليمات البرمجية (code segment)، المعروف أيضاً بقسم النص، والذي يكون للقراءة فقط في العديد من البنى. أما البيانات غير المُهيأة، سواء كانت متغيرات أو ثوابت، فتوجد في(.bsssegment).
تاريخيًا، ولتمكين المعالجات المركزية المبكرة من دعم مساحات عناوين ذاكرة أكبر من الحجم الأصلي لسجل العناوين الداخلي، اعتمدت نظام تجزئة الذاكرة، حيث كانت تخزن مجموعة صغيرة من المؤشرات لاستخدامها كإزاحات لمناطق محددة. وقد وفرت عائلة معالجات إنتل 8086 أربعة قطاعات: قطاع التعليمات البرمجية، وقطاع البيانات، وقطاع المكدس، والقطاع الإضافي. وكان البرنامج قيد التنفيذ يضع كل قطاع في موقع محدد في الذاكرة، وتُنفذ جميع التعليمات التي تعمل على البيانات داخل هذه القطاعات نسبةً إلى بداية ذلك القطاع. وقد سمح هذا لسجل عناوين 16 بت، الذي كان بإمكانه الوصول عادةً إلى 64 كيلوبايت من مساحة الذاكرة، بالوصول إلى 1 ميجابايت من مساحة الذاكرة.
تم نقل هذا التقسيم لمساحة الذاكرة إلى كتل منفصلة ذات مهام محددة إلى لغات البرمجة في ذلك الوقت، ولا يزال هذا المفهوم مستخدمًا على نطاق واسع في لغات البرمجة الحديثة.
ذاكرة البرنامج
يمكن تصنيف ذاكرة برنامج الحاسوب بشكل عام إلى قسمين: للقراءة فقط، وللقراءة والكتابة. نشأ هذا التمييز من الأنظمة القديمة التي كانت تحتفظ ببرنامجها الرئيسي في ذاكرة للقراءة فقط، مثل Mask ROM و EPROM و PROM و EEPROM . ومع ازدياد تعقيد الأنظمة، وتحميل البرامج من وسائط تخزين أخرى إلى ذاكرة الوصول العشوائي (RAM) بدلاً من تنفيذها من ذاكرة القراءة فقط (ROM)، بقيت فكرة عدم تعديل بعض أجزاء ذاكرة البرنامج. أصبحت هذه الأجزاء هي مقاطع .text و .rodata من البرنامج، أما الجزء المتبقي القابل للكتابة فقد قُسّم إلى عدة مقاطع أخرى لمهام محددة.
شفرة
يحتوي جزء التعليمات البرمجية ، المعروف أيضًا باسم جزء النص ، على التعليمات البرمجية القابلة للتنفيذ ، وهو عادةً للقراءة فقط وذو حجم ثابت.
بيانات

يحتوي قسم البيانات على متغيرات ثابتة مُهيأة، أي متغيرات عامة ومتغيرات ثابتة محلية لها قيمة مُحددة ويمكن تعديلها. ومن الأمثلة على ذلك في لغة C:
int i = 3 ; char a [] = "Hello World" ; static int b = 2023 ; // تهيئة متغير عام ثابت void foo ( void ) { static int c = 2023 ; // تهيئة متغير محلي ثابت }BSS
يحتوي قسم BSS على بيانات ثابتة غير مهيأة، تشمل المتغيرات والثوابت، أي المتغيرات العامة والمتغيرات الثابتة المحلية التي تُهيأ إلى الصفر أو لا تحتوي على تهيئة صريحة في شفرة المصدر. ومن الأمثلة على ذلك في لغة C:
static int i ; static char a [ 12 ];كومة
يحتوي قسم الكومة على ذاكرة مُخصصة ديناميكيًا، ويبدأ عادةً من نهاية قسم BSS ويتوسع إلى عناوين أكبر منه. تتم إدارته بواسطة الدوال malloc و calloc و realloc و free، والتي قد تستخدم استدعاءات النظام brk و sbrk لتعديل حجمه (لاحظ أن استخدام brk/sbrk وقسم كومة واحد ليس شرطًا لتنفيذ وظيفة malloc/calloc/realloc/free؛ إذ يمكن أيضًا تنفيذها باستخدام mmap /munmap لحجز/إلغاء حجز مناطق غير متجاورة من الذاكرة الافتراضية في مساحة العناوين الافتراضية للعملية ). يتشارك جميع الخيوط والمكتبات المشتركة والوحدات النمطية المحملة ديناميكيًا في العملية قسم الكومة.
كومة
يحتوي جزء المكدس على مكدس الاستدعاءات ، وهو بنية LIFO ( آخر ما يدخل أول ما يخرج)، ويقع عادةً في الأجزاء العليا من الذاكرة. يتتبع سجل "مؤشر المكدس" أعلى المكدس، ويتم تعديله في كل مرة تُضاف قيمة إليه. تُسمى مجموعة القيم المضافة لاستدعاء دالة واحدة "إطار المكدس". يتكون إطار المكدس كحد أدنى من عنوان العودة. كما تُخصص متغيرات تلقائية على المكدس.
كان جزء المكدس تقليديًا ملاصقًا لجزء الكومة، وكانا ينموان باتجاه بعضهما؛ وعندما يلتقي مؤشر المكدس بمؤشر الكومة، تكون الذاكرة الحرة قد نفدت. مع مساحات العناوين الكبيرة وتقنيات الذاكرة الافتراضية، يميل وضعهما إلى أن يكون أكثر حرية، لكنهما لا يزالان ينموان عادةً في اتجاه متقارب. في بنية الحاسوب الشخصي x86 القياسية ، ينمو المكدس باتجاه العنوان صفر، مما يعني أن العناصر الأحدث، الأعمق في سلسلة الاستدعاءات، تكون في عناوين عددية أقل وأقرب إلى الكومة. في بعض البنى الأخرى، ينمو في الاتجاه المعاكس.
اللغات المترجمة
تُوفر بعض اللغات المُفسَّرة آليةً مُشابهةً لجزء البيانات، ولا سيما لغتا بيرل [ 1 ] وروبي [ 2 ] . في هاتين اللغتين، يُشير تضمين السطر (في بيرل) أو (في روبي، بيرل القديمة) إلى نهاية جزء التعليمات البرمجية وبداية جزء البيانات. يتم تنفيذ المحتوى الذي يسبق هذا السطر فقط، بينما يكون محتوى ملف المصدر الذي يليه مُتاحًا ككائن ملف: في بيرل (على سبيل المثال، ) وفي روبي. يُمكن اعتبار هذا شكلاً من أشكال المستند المُضمَّن (ملف حرفي).__DATA____END__PACKAGE::DATAmain::DATADATA
انظر أيضاً
مراجع
- ↑ perldata: القيم الحرفية الخاصة
- ↑ روبي: البيانات المضمنة:
روابط خارجية
- "شركة ناشئة بلغة C" . bravegnu.org .
- "mem_sequence.c - يسرد مناطق الذاكرة في عملية ما بشكل تسلسلي" . مؤرشف من الأصل بتاريخ 2009-02-02.
- فان دير ليندن، بيتر (1997). برمجة الخبراء C: أسرار Deep C (PDF) . برنتيس هول. ص 119 وما يليها.
- تنسيقات الملفات القابلة للتنفيذ
- إدارة الذاكرة
