2012-12-10 13 views
8

ich versucht habe, zu kompilieren meine Quellcode mit folgenden Flags Assembler:
1. -flto
2. -flto -ffat-lto-objects
3. -flto -fno-fat-lto-objectsWas ist der Unterschied in gcc zwischen lto und fett lto-Objekte

Dritte bietet optimierten slim LTO-Code, wie in der Dokumentation geschrieben, aber ich sehe keinen Unterschied in der Ausgabemontage Datei zwischen ersten und zweiten, warum?

OS: Linux
Compiler: GCC 4.7

+0

Es macht nicht wirklich Sinn, nach Assembler-Output und -fno-fat-lto-Objekten gleichzeitig zu fragen. –

Antwort

9

Der Unterschied zwischen Fett- und Nichtfett-Objektdateien besteht darin, dass Fettobjektdateien sowohl die Zwischensprache als auch den normalerweise kompilierten Code enthalten. Wenn Sie bei linktime Compiler ohne -flto aufrufen, werden fette Objekte als normale Objektdateien (und LTO-Informationen verworfen) behandelt, während schlanke Objekte LTO-Optimierer inovoke, weil es keine Möglichkeit gibt, ohne sie zu behandeln.

Wenn Sie beide mit -flto kompilieren und verknüpfen, sollten sowohl fette als auch schlanke Objekte Ihnen die gleiche Binärdatei geben, nur schlanke Objekte werden kleiner und schneller kompiliert, weil Sie die redundante Codeerzeugung vermeiden.

+0

Und heutzutage - anders als damals, als die Frage gestellt wurde - ist der schlanke Modus der Standard, oder? (Übrigens habe ich über LTO gelesen und sehe deinen Namen oft :-) –

2

Wahrscheinlich wird es hilfreich sein, jemanden zu:
Here nächsten schrieb:
The current implementation only produces “fat” objects, effectively doubling compilation time and increasing file sizes up to 5x the original size

So wie ich denke, es ist der Hauptgrund, .