gcc-4.5 から link time optimization (lto) と呼ばれる最適化が可能になった。 従来の分割コンパイルでは、コンパイル単位(ファイル)での最適化しかできなかった。例えば、別ファイルの関数をインライン展開することはできないし、引数に渡されたポインタの escape analysis も諦めざるを得なかった。 lto はコンパイルする時に、中間表現(GIMPLEのバイトコード表現)をオブジェクトファイルに残しておき、リンクするときに、すべての中間表現を使って最適化しなおす。要は、ソースコードを全部とっておいて、最後に全部をコンパイルしなおすのと、同じようなものだ。 最大の欠点は、最後にコンパイルしなおすところだ。 このコンパイルは一回のコンパイルであり、単一プロセスで実装されているのでマルチCPUを生かせない。(いっぽう、分割コンパイルなら依存関係が緩いので並列
