2012-12-10 62 views
8

ho cercato di compilare in assembler il mio codice sorgente con prossimi bandiere:
1. -flto
2. -flto -ffat-lto-objects
3. -flto -fno-fat-lto-objectsQual è la differenza tra il gcc in lto e grassi-lto-oggetti

La terza fornisce il codice LTO slim ottimizzato come scritto nella documentazione, ma non vedo alcuna differenza nel file dell'assieme di output tra primo e secondo, perché?

SO: Linux
Compiler: GCC 4.7

+0

Non ha davvero senso chiedere l'output dell'assemblatore e -fno-fat-lto-objects allo stesso tempo. –

risposta

9

La differenza tra i file di oggetti grassi e non grassi è che i file di oggetti grassi contengono sia il linguaggio intermedio sia il codice normalmente compilato. Al momento del collegamento, se invochi il compilatore senza -flto, gli oggetti grassi verranno gestiti come normali file oggetto (e le informazioni LTO scartate), mentre gli oggetti snelli includeranno gli ottimizzatori LTO perché non c'è modo di gestirli senza di essi.

Se si compilano e si collegano con -flto, sia gli oggetti grossi sia quelli snelli dovrebbero fornire lo stesso binario, gli oggetti appena magri saranno più piccoli e più veloci da compilare, poiché si eviterà la generazione di codice ridondante.

+0

E al giorno d'oggi - a differenza di quando è stata fatta la domanda - la modalità slim è l'impostazione predefinita, giusto? (dopo aver letto di LTO e visto molto il tuo nome :-) –

2

Probabilmente sarà utile a qualcuno:
Here scritto prossimo:
The current implementation only produces “fat” objects, effectively doubling compilation time and increasing file sizes up to 5x the original size

Così come penso che sia la ragione principale .