17

次のフラグを使用してソースコードをアセンブラするようにコンパイルしようとしました :
1。2.3 -flto
-flto -ffat-lto-objects
-flto -fno-fat-lto-objects

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

OS:linux
コンパイラ:GCC 4.7

4

2 に答える 2

22

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

コンパイルとリンク-fltoの両方を行う場合、ファットオブジェクトとスリムオブジェクトの両方で同じバイナリが得られるはずです。冗長なコード生成を回避できるため、スリムオブジェクトだけが小さくなり、コンパイルが高速になります。

于 2015-03-29T06:38:26.197 に答える
3

おそらくそれは誰かに役立つでしょう:
ここに次に書いた:

現在の実装では、「ファット」オブジェクトのみが生成され、コンパイル時間が実質的に2倍になり、ファイルサイズが元のサイズの最大5倍に増加します。

それが主な理由だと思います。

于 2012-12-10T11:07:28.457 に答える