2013-02-05 11 views
8

Sto lavorando su un processore embedded, quindi le dimensioni binarie sono molto importanti. Sto cercando di evitare l'uso della libreria standard. Mi piacerebbe usare std :: function, tuttavia. Ho estratto "function.hpp" da boost, e sto cercando di usarlo, ma includere semplicemente function.hpp aumenta la dimensione del mio binario 200k, il che rende più grande di quanto il mio processore possa accettare. Se includo la libreria standard, aumenta solo il mio 60k binario. Non riesco a capirlo, se non sto ancora usando uno dei modelli, non ci dovrebbe essere alcun sovraccarico. E anche se lo faccio, non riesco a immaginare che valga 200 k di codice. Sto usando gcc 4.7 e ho disabilitato le informazioni di debug da quello che posso dire "-g0" e ho attivato le ottimizzazioni "-O2".Includendo boost function.hpp, senza usarlo, aumenta la dimensione del mio file binario di 200k. Perché?

Qualsiasi aiuto sarebbe molto apprezzato.

+0

Ottimizza di più con '-O3'? (o '-Os' per le dimensioni) – Cornstalks

+1

@Cornstalks Questa è esattamente la cosa sbagliata da fare. '-O3' consente ottimizzazioni che possono * aumentare * le dimensioni binarie. Ad ogni modo, non penso che questo sia legato alle ottimizzazioni, ma penso che includere l'intestazione di boost faccia sì che il compilatore accolga la gestione delle eccezioni nel tuo programma mentre non le usi diversamente. Per quale sistema/processore stai compilando? – us2012

+0

'-Os' si ritira di un paio di kb, (grazie per il suggerimento) ma non abbastanza per importare. Compilando senza eccezioni, '-fno-exceptions' cambia la dimensione 5k, e aggiungendo il supporto per le eccezioni, aggiunge il 5k indietro. Ancora non ha senso. Sto compilando per ARM Cortex m3. L'altra cosa strana è che posso usare std :: function dalla libreria standard, effettivamente usarlo nel codice, non solo includerlo e aggiunge solo 60k. Si calcola che si compilerebbe nella stessa gestione delle eccezioni che sarebbe quella spinta. –

risposta

2

GCC include alcune informazioni sui simboli nel file binario compilato anche se si utilizza -g0. Per eliminare veramente tutti i simboli, è necessario utilizzare l'opzione da riga di comando --strip-all per il linker.

Inoltre, poiché la dimensione dell'eseguibile è importante per te, considerare -fdata-sections e -ffunction-sections per il compilatore e --gc-sections per il linker.

+0

Grazie, sto già usando queste opzioni.Buoni consigli però. –

Problemi correlati