2010-06-23 12 views
19

oggi ho scoperto che la libreria statica compilata su cui sto lavorando è molto più grande in uscita modalità che in Debug. L'ho trovato molto sorprendente, poiché la maggior parte delle volte accade esattamente l'opposto (per quanto ne so).modalità di rilascio libreria statica molto più grande rispetto alla versione modalità debug

La dimensione in modalità di debug è leggermente superiore a 3 MB (è un progetto abbastanza grande), ma nel rilascio arriva fino a 6,5 ​​MB. Qualcuno può dirmi quale potrebbe essere la ragione di questo? Sto usando le solite impostazioni di Visual Studio (2008) per un progetto di libreria statica, non ho cambiato quasi nulla nelle impostazioni di configurazione della build. Nel rilascio, sto usando/O2 e "Favor dimensioni o velocità" è impostato su "Nessuno". La/O2 ("Massima velocità") potrebbe rendere il file finale .lib molto più grande della versione di debug con tutte le informazioni di debug in esso contenute?

EDIT: Informazioni aggiuntive:
Debug:
- ottimizzazione dell'intero programma: No
- abilitare livello di funzione di collegamento: No

di uscita:
- ottimizzazione dell'intero programma: Attiva link-tempo codice generazione
- abilita il collegamento a livello di funzione: Sì

+1

A proposito di "ottimizzazione programma complesso" e "a livello di funzione di collegamento" impostazioni in entrambe le configurazioni? – sharptooth

+0

Aggiornate le informazioni. – PeterK

risposta

28

La differenza è dovuta in particolare alla generazione del codice di collegamento. Leggi il capitolo Link-Time Code Generation in Compilers - What Every Programmer Should Know About Compiler Optimizations su MSDN - in pratica dice che con LTCG attivato il compilatore produce molti più dati che sono impacchettati nella libreria statica in modo che il linker possa usare quei dati extra per generare codice macchina migliore mentre in realtà collegamento del file eseguibile.

Dato che LTCG è disattivato nella configurazione Debug, la libreria prodotta è notevolmente più piccola poiché non dispone di tali dati aggiuntivi.

PS: Original Link (not working at 11/09/2015)

+3

Grazie, questo ha spiegato molto! – PeterK

0

Personalmente non ho mai visto un relea se il PDB è più grande di un PDB di debug. Lo stesso accordo per le LIB.

1

L'ottimizzazione potrebbe essere il problema qui, in particolare le funzioni inline create automaticamente saranno più grandi ma più veloci nella versione di debug.

Problemi correlati