コンパイラ
リンク時最適化(LTO)によって可能になる最適化として最も適切なものはどれか。
- A別々のファイルの関数どうしでも、インライン展開などができる
- B1つの関数の中のループだけを展開できるようになる
- Cリンクの処理が不要になり、オブジェクトファイルがそのまま実行できる
答えと解説を見る
正解:A. 別々のファイルの関数どうしでも、インライン展開などができる
通常のコンパイルでは、ソースファイルを1つずつ別々に機械語へ変換するので、別のファイルにある関数の中身は見えず、ファイルをまたいだインライン展開や定数の伝播ができません。LTOでは、各ファイルを中間表現のまま残しておき、リンクのときにプログラム全体をまとめて最適化します。これにより、ファイルをまたいだインライン展開や、どこからも呼ばれない関数の削除などが可能になります。1つの関数の中のループの展開は、通常のコンパイルでもできます。
- A. 正しい。ファイルをまたいだ最適化ができるようになります。
- B. 関数の中のループの展開は通常のコンパイルでもできます。
- C. リンクは引き続き必要です。