c++ - 設定 - リンク時間の最適化を使用しない理由はありますか?




最適化オプション 結果が変わる (2)

GCC、MSVC、LLVM、おそらく他のツールチェーンはリンク時間(プログラム全体)の最適化をサポートし、コンパイル単位間の呼び出しの最適化を可能にします。

本番ソフトウェアのコンパイル時にこのオプションを有効にしない理由はありますか?

https://code.i-harness.com


この最近の質問は、LTOが望ましくない影響を及ぼす可能性のある別の可能性のある(しかし具体的な)ケースを提起する。問題のコードが計時用に装備されており、計装され計装ステートメントの相対的な順序を保存しようとするためにLTOは必要な順序付けを破壊する可能性があります。

私はそれが具体的だと言った。


私は、 「プロダクションソフトウェア」とは、お客様に出荷して生産に行くソフトウェアを意味します。 常にコンパイラの最適化を使用しない理由は何ですか? ( Mankarseによって親切に指摘されていMankarse )は、コードをデバッグしたいという状況に適用されます(ソフトウェアはまだ開発段階にあります。

私が考えることができる唯一の有効な理由は、リンク時間の最適化微妙なバグを引き起こす可能性があることです。 カーネルのリンク時の最適化を参照してください。 あなたが出荷しようとしているソフトウェアの正確性をチェックするための適切なテストを行っていると仮定すると、デフォルトでLTOを使用しない理由はありません。 (LTOは時間の経過とともに成熟していますので、微妙なバグが少なくて済むようにしましょう)





compiler-optimization