1. ホーム
  2. c++

リンクタイム最適化(LTO)を使用しない理由はありますか?

2023-10-06 17:52:40

質問

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

量産用ソフトウェアをコンパイルする際にこのオプションを有効にしない理由はあるのでしょうか?

どのように解決するのですか?

私は 製品版ソフトウェア" というのは、顧客に出荷する/生産に入るソフトウェアのことですね。の回答は なぜ常にコンパイラの最適化を使用しないのですか? (親切な指摘で マンカーズ ) は、コードをデバッグしたい場合 (つまり、ソフトウェアがまだ開発段階にあり、製品版ではない場合) に適用されることがほとんどです。

この回答を書いてから 6 年が経過し、更新が必要です。2014年当時は、問題点は

  • リンク時間の最適化が時折導入される 微妙なバグ が発生することがあります。 カーネルへのリンク時間最適化 . 2020年時点では、この問題は少なくなっていると思います。このようなコンパイラやリンカのバグから身を守りましょう。出荷しようとしているソフトウェアが正しいかどうかをチェックするために適切なテストを行うこと。
  • コンパイル時間の増加 . のおかげで、2014年以降、状況は大幅に改善されたという主張があります。 スリムオブジェクト .
  • 大きなメモリ使用量 . この投稿 は、パーティション分割のおかげで、近年状況が劇的に改善されたと主張しています。

2020年現在、私はどのプロジェクトでもデフォルトでLTOを使用するようにしています。