ثابت vs العالمية من حيث السرعة و استهلاك مساحة في ج

StackOverflow https://stackoverflow.com/questions/323094

سؤال

أود أن أعرف ما الفرق بين المتغيرات الثابتة و المتغيرات العالمية في مجال سرعة الوصول و استهلاك مساحة.(إذا كنت تريد أن تعرف برنامجي:دول مجلس التعاون الخليجي مترجم على ويندوز.(أنا باستخدام Cygwin مع تريتون IDE على ARM7 جزءا لا يتجزأ من البرمجة على نظام ويندوز.تريتون يأتي مع دول مجلس التعاون الخليجي مترجم على منصة جافا التي يمكن تشغيلها على نظام التشغيل ويندوز.))

(من الواضح أنني في ملف وظيفة نطاق من هذا السؤال)

تحرير: حسنا أعطني جوابا على أي جهاز تحكم / المعالج البيئة.

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

المحلول

لا يوجد فرق الفضاء ، فإنها تأخذ نفس المبلغ.

ولكن هناك فرق السرعة:ثابت أسرع.

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

مع دول مجلس التعاون الخليجي يمكنك تمرير جميع .c مصادر في نفس الوقت لذلك ومن ثم يمكن أيضا رؤية ما يحدث في وظيفة مكالمات وظائف من وحدات مختلفة.أن تجعل من العمل عليك أن تمر إلى جانب كل .c الملفات دفعة واحدة -combine و -fwhole-program.على -fwhole-program يجعل كل globals ثابت (لا وحدة ثابتة ولكن تجميع وحدة ثابتة ، أيجميع معين .c ملفات معا).على -combine يجعل intermodule التحليل.

نصائح أخرى

استهلاك مساحة:في الأساس لا فرق.المرة الوحيدة التي سوف يكون هناك مساحة المسألة إذا كنت تدير للحصول على نفس قطعة من ساكنة البيانات المخفية في ن الكائن الملفات ، ثم تحصل على عامل الضرب N حيث قد يكون لديك فقط 1 نسخ إذا كان عالمية واحدة قطعة من البيانات.بيد أن سوء تصميم المسألة.إخفاء المعلومات هو جيد - ما لم تكن المعلومات لا ينبغي أن تكون مخفية.

سرعة الوصول إلى:لا فرق.

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

أتوقع أي الفرق سوف تأتي من التعبئة (الفضاء) و التخزين المؤقت (السرعة) قضايا.سواء تلك التي يمكن أن تنشأ أيضا من أي شيء آخر أيضا.

هناك لا فرق في env تصف عندما يتعلق الأمر الفضاء.ثابت أو العالمية فار تستهلك نفس القدر من الذاكرة.

بالنسبة السرعة الاعتبارات (ولكن ليست ممارسة جيدة) هل يمكن أن تفضل العالمية فأر, إذا كنت بحاجة إلى الوصول إلى فار خارج ملف واحد.(المرجع استخدام external char my_global_char_placed_else_where;)

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

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

انا عن نفسي استخدم MSP430, ARM7(فقط الاختبارات) AVR32 micros من أجل التنمية

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

تحرير :نعم - space :لا فرق.

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