c++ هل هناك سبب لعدم استخدام تحسين وقت الارتباط(LTO)؟




performance compilation (3)

أفترض أنك تعني بـ "برنامج الإنتاج" البرامج التي تشحنها إلى العملاء / تدخل في الإنتاج. الإجابات في لماذا لا تستخدم دائمًا برنامج التحويل البرمجي الأمثل؟ (يرجى الإشارة إلى ذلك بواسطة Mankarse ) تنطبق في الغالب على المواقف التي ترغب في تصحيح التعليمات البرمجية الخاصة بك (بحيث لا يزال البرنامج في مرحلة التطوير - وليس في مرحلة الإنتاج).

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

دول مجلس التعاون الخليجي ، MSVC ، LLVM ، وربما غيرها من أدوات الأدوات لديها دعم لتحسين وقت الارتباط (البرنامج بأكمله) للسماح بتحسين المكالمات بين وحدات الترجمة.

هل هناك سبب لعدم تمكين هذا الخيار عند تجميع برامج الإنتاج؟


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

الجانب السلبي الأكبر هو أنه يزيد بشكل كبير وقت الارتباط.


يثير هذا السؤال الأخير حالة أخرى محتملة (ولكنها محددة إلى حد ما) قد يكون لـ LTO فيها تأثيرات غير مرغوب فيها: إذا تم وضع الكود المعني للتوقيت ، واستخدمت وحدات تجميع منفصلة لمحاولة الحفاظ على الترتيب النسبي لبيانات الأدوات والآلات ، ثم LTO لديه فرصة جيدة لتدمير الترتيب اللازم.

قلت انها كانت محددة.







compiler-optimization