وضع الإصدار المكتبة الثابتة أكبر بكثير من إصدار وضع التصحيح

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

سؤال

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

يزيد حجم في وضع التصحيح قليلاً عن 3 ميغابايت (إنه مشروع كبير إلى حد ما) ، ولكن في الإصدار يصل إلى 6،5 ميغابايت. هل يمكن لأحد أن يخبرني ما الذي يمكن أن يكون سبب هذا؟ أنا أستخدم إعدادات Visual Studio (2008) المعتادة لمشروع المكتبة الثابتة ، ولم يغير أي شيء تقريبًا في إعدادات تكوين الإنشاء. في الإصدار ، أنا أستخدم /O2 و "الحجم أو السرعة" يتم تعيينه على "لا". هل يمكن أن يتسبب /O2 ("زيادة السرعة") في أن يكون. lib أكبر بكثير من إصدار التصحيح مع جميع معلومات تصحيح الأخطاء فيه؟

تعديل:معلومات إضافية:
تصحيح:
- تحسين البرنامج بالكامل: لا
- تمكين ربط مستوى الوظيفة: لا

إطلاق سراح:
- تحسين البرنامج بالكامل: تمكين توليد رمز وقت الرابط
- تمكين ربط مستوى الوظيفة: نعم

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

المحلول

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

نظرًا لأن لديك LTCG في تكوين التصحيح ، فإن المكتبة المنتجة أصغر بشكل ملحوظ لأنه لا تحتوي على هذه البيانات الإضافية.

ملاحظة:الرابط الأصلي (لا يعمل في 11/09/2015)

نصائح أخرى

يمكن أن يكون التحسين هو المشكلة هنا ، لا سيما إنشاء تلقائي inline ستكون الوظائف أكبر ولكنها أسرع في الإصدار من التصحيح.

أنا شخصياً لم أر قط إصدار PDB أكبر من تصحيح PDB. نفس الصفقة ل libs.

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