リンク時最適化(LTO)
Note
SOLID 3.3.0 以降で使用できます。
概要
LTOでは、リンク時に最適化を行うことで、モジュール間の解析に基づいた最適化を実行できます。 これによって、コンパイル単位(ソースファイル単位)の解析に基づいたコンパイル時最適化と比較し、パフォーマンスの向上やコードサイズの減少が期待できます。
最もわかりやすいのは、コンパイル時最適化では不可能な、コンパイル単位をまたいだインライン展開がLTOによって可能となります。ただし、LTO自体は不要となった関数や変数を削除はしないので、そのような不要コードを削減したい場合はリンカオプションに --gc-sections
を指定してください。その際には -ffunction-sections
と -fdata-sections
オプションを併用すると、より効果的な不要コードの削除が期待できます。
一般的に、大規模なソフトウェアに対してリンク時最適化を行う場合、非常に多くのメモリ資源と時間を消費する傾向があるため、 開発PCのスペックによっては、メモリ不足やビルド時間の大幅な増加が問題となる可能性があります。この問題を緩和するため、 Clang/LLVMでは、ThinLTO と呼ばれるリンク時最適化の手法をサポートしており、メモリや計算リソース消費の増加を抑えながらパフォーマンスの向上が期待できます。
注意
コンパイラの最適化を抑制するために変数や関数を別ファイルに分割するという手法が、LTO有効時には期待通り動作しなくなります。(ファイルを分けても、インライン展開などが発生し、不要と判断された関数呼び出しや変数へのアクセスが削除されてしまう可能性があります。)
そのような場合にはvolatile修飾子やLTOを無効にするコンパイラオプション( -fno-lto
)などを適切に使用するように修正してください。
使い方
ThinLTO です。
から選択してください。推奨はNote
リンク時最適化を有効にすると、自動的にlldリンカが使用されるようになります。
制限事項
アプリケーション プロジェクト内のコードは最適化されません。