Was ist der Unterschied in gcc zwischen lto und fat-lto-Objekten?

8

Ich habe versucht, meinen Quellcode mit folgenden Flags zu assemblieren:
1. -flto
2. -flto -ffat-lto-objects
3. -flto -fno-fat-lto-objects

Der dritte bietet optimierten slim LTO-Code, wie in der Dokumentation beschrieben, aber ich sehe keinen Unterschied in der Ausgabemontagedatei zwischen dem ersten und zweiten, warum?

Betriebssystem: linux
Compiler: GCC 4.7

    
Arseniy 10.12.2012, 10:50
quelle

2 Antworten

9

Der Unterschied zwischen Fett- und Nicht-Fett-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 behandelt (und LTO-Informationen werden verworfen), während schlanke Objekte LTO-Optimierer inovoke, weil es keine Möglichkeit gibt, ohne sie umzugehen.

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

    
Jan Hubička 29.03.2015, 06:38
quelle
2

Wahrscheinlich wird es für jemanden hilfreich sein:
Hier hat geschrieben nächstes:
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.

    
Arseniy 10.12.2012 11:07
quelle

Tags und Links