سؤال

في C++ التخزين فئة محدد ثابت يخصص الذاكرة من البيانات.ماذا تعني كلمة "البيانات" يعني ؟

هل كانت مفيدة؟

المحلول

وبالإضافة إلى ما قال كونراد، إعلان المتغير كما ثابت يعني أساسا أن الذاكرة لأنه يحصل المخصصة للبرنامج كما يتم تحميل ذلك، بدلا من على كومة أو المكدس. تاريخيا، وذلك باستخدام متغيرات ثابتة فقط في التطبيقات الحرجة يعني أن أثر الذاكرة من التطبيق لن يغير في وقت التشغيل، وبالتالي فإنه من غير المرجح أن تفشل بسبب القيود المفروضة على الموارد. لا أعرف إذا كان هذا لا يزال صحيحا من أنظمة التشغيل الحديثة.

إذا تحصل المترجم الخاص بك لتوليد ملف التخطيط كجزء من انتاجها، يمكنك إلقاء نظرة ترى في ما هو موجود في جميع الأقسام المختلفة، بما في ذلك البيانات.

نصائح أخرى

وأنا لست على دراية مصطلح "منطقة البيانات" ولكن غالبا ما تنقسم الذاكرة إلى "مقطع التعليمات البرمجية" و "مقطع البيانات". يقيم التعليمات البرمجية في السابق، والبيانات في هذا الأخير. أفترض هذا هو ما المقصود هنا.

وكلاسيكي، وليس هناك تمييز بين البلدين. ومع ذلك، يمكن أن العديد من أنظمة التشغيل الحديثة تحظر إعدام الباحث كود انه مقطع البيانات (بشرط وحدة المعالجة المركزية يدعم هذا التمييز). وهذا ينطبق أحيانا بعبارة صيد "NX العلم"، كما في "لا إعدام"، ويمكن أن تمنع بعض حالات حقن الشيفرات الخبيثة على نحو فعال.

و/ تحرير: لاحظ أن C ++ القياسية لا يذكر "منطقة البيانات"

.

أسماء المناطق تختلف من منصة مترجم ورابط.

في عام ، هناك:

  • برنامج النص:الكود القابل للتنفيذ الفضاء.
  • الثوابت:غير قابل للتنفيذ الثوابت.
  • المكدس:المكدس.
  • bss:على نطاق واسع "توازن القوى" في C/C++ الشروط."كتلة كتبها رمز"
  • البيانات:Uninitialised globals
  • كومة الذاكرة المؤقتة:التخزين المخصصة في وقت التشغيل.

في هذه الحالة الوثائق في السؤال هو استخدام اسم "البيانات" من أجل ما يسمى عادة bss الجزء.

في ج الشروط, فئة تخزين محدد "ثابت" يعني أن الذاكرة موجودة على عمر البرنامج initialised إلى صفر أو قيمة initialiser.في المثال:

static int s_value_one;
static int s_value_two = 123;

قيمة s_value_one هو ضمان أن تكون صفر وقيمة s_value_type 123 في نقطة البيان الأول في main().كيف يأتي هذا أن يكون صحيحا هو تنفيذ هذه القضية.

وماذا قال كونراد.

وأود أن أضيف أن هناك لا تزال وحدات المعالجة المركزية الى ان هناك لا يمكن قراءة البيانات في حالة انها وضعت في قسم رمز والعكس بالعكس. وكانت هذه منذ عقود أكثر شيوعا، لكنها لا تزال على قيد الحياة في العالم المضمنة.

في وباختصار يمكن القول رابط مجرد مجموعة رموز من نوعها على قدم المساواة معا. على جهاز الكمبيوتر الذي غالبا ما يكون أكثر من المناطق التعليمات البرمجية والبيانات بسيطة. سوف تجد مجالات البيانات غير مهيأ، وقراءة البيانات فقط وغيرها من الاشياء OS تعتمد أيضا.

مع القليل من البحث في قوقل وجدت المزيد من المعلومات حول هذه المواضيع هنا:

وهناك العديد من الأماكن التي قد ينتهي بيانات تصل. عادة، يتم تخصيص المتغيرات المحلية على المكدس، ويمكنك تخصيص الأشياء على كومة باستخدام malloc (أو الإصدار الافتراضي دي من 'الجديدة'). بيانات ثابتة، ومع ذلك، يحال عادة عندما يبدأ البرنامج، وربما في نهاية المطاف في أي مكان - أين هو بالضبط ما يصل إلى مترجم، ونظام التشغيل، وشكل قابل للتنفيذ

.

قابل للتنفيذ يحتوي على الكثير من المعلومات في ذلك.

قابل للتنفيذ ، لديه العديد من أنواع / أصناف من البيانات المخزنة داخل الملف الفعلي.

على سبيل المثال هي

  1. التعليمات البرمجية القابلة للتنفيذ تعليمات
  2. الموارد
  3. معلومات التبعية (الذي دلس هذه الثنائية يعتمد على)
  4. الرموز التي يتم تصديرها من هذه الثنائية

الخ

يجب أن يكون هناك بعض طريقة لتنظيم

كل هذه المعلومات داخل .ملف exe شكل نظام التشغيل يمكن بسهولة العثور على جميع المعلومات وتحميل الملف القابل للتنفيذ و تحصل على عمل الأشياء.لهذا الغرض المشترك تنسيق ثنائي (تم إنشاؤه بواسطة$ M بالطبع) دعا PE (قابل للتنفيذ المحمولة) في العالم ويندوز.جميع المعلومات أنا مجرد سرد (وغيرها الكثير) بالتفصيل في أقسام مختلفة من الثنائية.

.بيانات القسم

واحد مثل هذا القسم هو .مقطع البيانات.على .بيانات القسم يحتوي على جميع تهيئة العالمية و بيانات ثابتة ، بينما .bss القسم يحتوي على غير مهيأ البيانات العالمية.

لماذا تتطلب قسم منفصل عن globals ?

حسنا العالمية يتصرف مثل عالمي لأنه يتم إنشاؤه في مساحة الذاكرة المتوفرة عمر البرنامج وليس مؤقت بنية البيانات مثل كومة والتي قد تكون الكتابة / إعادة استخدامها.(مثل السيارات العادية المتغيرات).

مترجم

ولذلك هذه المتغيرات تحتاج إلى تخصص في بعض العنوان الدائم في كومة ، والتي للأسف لا يمكن أن تعرف في وقت التحويل البرمجي.وبالتالي فإن المترجم الأماكن العالمية و متغيرات ثابتة في هذا .البيانات / .bss القسم و التعليمات التي تشير إلى هذه المتغيرات تشير إلى هذه نسبيا عناوين دائمة في .البيانات / .bss.

رابط

عندما رابط تحميل الملف القابل للتنفيذ في العالم الحقيقي ، تقرر أين هذه الأقسام يجب أن توضع ويخلق إصلاح الناشئة عن هذه temp عناوين هذه التعليمات التي تشير إلى globals الرجوع إلى الآن الظاهري الحقيقي عناوين في الذاكرة البرامج.

الآن أنت تعرف ما .مقطع البيانات / المنطقة و لماذا globals يحتاج إلى تخصيص بعض المساحة في هذا المجال وكيف أن يساعد البرنامج في الوقت الحقيقي.غوغلينغ PE شكل رابط و .مقطع البيانات وما إلى ذلك سوف تحصل على الروابط.

وأعتقد أن "منطقة البيانات" ويشير إلى كومة، في حين أن عادة يكون موجودا المتغيرات المحلية على المكدس.

وأو أنه يعني أن الذاكرة المخصصة لهذا المتغير يقع في القسم .data القابل للتنفيذ، ولكن ذلك سيكون محددا إلى Windows وشكل PE.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top