2012-12-10 12 views
8

間のGCCの違いは、私は次のフラグで私のソースコードをアセンブラにコンパイルしようとしているどのようなものです:
1. -flto
2. -flto -ffat-lto-objects
3. -flto -fno-fat-lto-objectsLTOと脂肪LTO-オブジェクト

3番目のものはドキュメントに書かれているように最適化されたslim LTOコードを提供しますが、最初と2番目の間に出力アセンブリファイルの違いはありません。なぜですか?

OS:Linuxの
コンパイラ:GCC 4.7

+0

アセンブラ出力と-fno-fat-lto-objectsを同時に要求するのは意味がありません。 –

答えて

9

fatオブジェクトファイルとnon-fatオブジェクトファイルの違いは、fatオブジェクトファイルに中間言語と通常コンパイルされたコードの両方が含まれていることです。リンク時に、-fltoを指定しないでコンパイラを呼び出すと、fatオブジェクトは通常のオブジェクトファイル(およびLTO情報は破棄されます)として処理されますが、スリムオブジェクトはLTOオプティマイザを無視します。

コンパイルして-fltoでリンクすると、太いオブジェクトと細いオブジェクトの両方で同じバイナリが得られるはずです。冗長なコード生成を避けるため、スリムなオブジェクトは小さく、コンパイルが速くなります。

+0

そして、最近、質問の質問時に戻ってきたように、スリムモードがデフォルトですね。 (私はLTOについて読んでいて、あなたの名前をたくさん見ています:-) –

2

おそらくそれは誰かに役立ちます:
Here次の書いた:
The current implementation only produces “fat” objects, effectively doubling compilation time and increasing file sizes up to 5x the original size

を、私はそれが主な理由だと思うように。

関連する問題