次のフラグを使用してソースコードをアセンブラするようにコンパイルしようとしました
:
1。2.3 -flto
。-flto -ffat-lto-objects
-flto -fno-fat-lto-objects
3つ目はslim
、ドキュメントに記述されているように最適化されたLTOコードを提供しますが、1つ目と2つ目の出力アセンブリファイルに違いは見られません。なぜですか?
OS:linux
コンパイラ:GCC 4.7
次のフラグを使用してソースコードをアセンブラするようにコンパイルしようとしました
:
1。2.3 -flto
。-flto -ffat-lto-objects
-flto -fno-fat-lto-objects
3つ目はslim
、ドキュメントに記述されているように最適化されたLTOコードを提供しますが、1つ目と2つ目の出力アセンブリファイルに違いは見られません。なぜですか?
OS:linux
コンパイラ:GCC 4.7
fatオブジェクトファイルとnon-fatオブジェクトファイルの違いは、fatオブジェクトファイルには中間言語と通常コンパイルされたコードの両方が含まれていることです。リンク時に、を使用せずにコンパイラを呼び出すと-flto
、ファットオブジェクトは通常のオブジェクトファイルとして処理され(LTO情報は破棄されます)、スリムオブジェクトはそれなしでは処理できないためLTOオプティマイザを呼び出します。
コンパイルとリンク-flto
の両方を行う場合、ファットオブジェクトとスリムオブジェクトの両方で同じバイナリが得られるはずです。冗長なコード生成を回避できるため、スリムオブジェクトだけが小さくなり、コンパイルが高速になります。
おそらくそれは誰かに役立つでしょう:
ここに次に書いた:
現在の実装では、「ファット」オブジェクトのみが生成され、コンパイル時間が実質的に2倍になり、ファイルサイズが元のサイズの最大5倍に増加します。
それが主な理由だと思います。