2013-03-21 12 views
9

Le note di rilascio per gcc erano un po 'vago su -og:gcc -O0 vs. -og tempo di compilazione

affronta la necessità per la compilazione veloce e un'esperienza di debug superiore mentre fornisce un ragionevole livello di runtime prestazione. L'esperienza complessiva per lo sviluppo dovrebbe essere migliore del livello di ottimizzazione predefinito -0.

"L'esperienza complessiva per lo sviluppo" include i tempi di compilazione? Se non ho bisogno di simboli di debug e sto ottimizzando per la compilazione, dovrei usare -O0 o -Og?

+3

Se non sono necessari i simboli di debug, è necessario utilizzare -O0 – Akobold

+4

Perché non solo la volta del completamento del * progetto * con * il compilatore * con le diverse opzioni e scegliere qual è il più veloce? – NPE

+0

Se sei interessato solo a buone prestazioni, il livello normale è O2. O0 è quasi privo di ottimizzazione, ed è stato principalmente per il debug (ad esempio non ottimizzerà le variabili inutilizzate, non migliorerà la codifica sciatta che è facilmente risolvibile, ecc.). – teppic

risposta

1

Con -Og il compilatore deve elaborare e scrivere dati aggiuntivi (per il debug), quindi richiederà più tempo. Basta compilare per assemblatore (con gcc -S -Og, ecc.) E confrontare. Ma qualunque differenza ci sia tra il -O0 e il -Og il runtime è probabilmente sminuito al momento di avviare gcc e il suo macchinario completo.

Se si desidera compilare il tempo, forse si dovrebbe considerare tcc per C. Forse LLVM è più veloce per C++.

+2

Avete prove per il backup del vostro primo reclamo, "Con -Og il compilatore deve costruire e scrivere dati extra (per il debug)"? Ciò si applicherebbe solo alle bandiere '-g' se non sbaglio. Uno sguardo nel codice sorgente di GCC 4.9.2 ('gcc/opts.c') ha mostrato che' -Og' è lo stesso di '-O1' ('/* -Og seleziona il livello di ottimizzazione 1. */'), ma con alcuni flag disabilitati che sarebbero abilitati con '-O1' o superiore (' OPT_LEVELS_1_PLUS_NOT_DEBUG', 'OPT_LEVELS_1_PLUS_SPEED_ONLY' e' OPT_LEVELS_2_PLUS_SPEED_ONLY'). – Lekensteyn

+1

Ho inviato una risposta più ampia qui: http://stackoverflow.com/a/27076307/427545 – Lekensteyn

1

"L'esperienza complessiva per lo sviluppo" include i tempi di compilazione?

Penso di sì, ma non in questo caso molto specifico.

Se non ho bisogno di simboli di debug e sto ottimizzando per la compilazione, dovrei usare -O0 o -Og?

-O0.

0

Se non ho bisogno di simboli di debug e sto ottimizzando per la compilazione, dovrei usare -O0 o -Og?

Se la presenza o l'assenza di simboli di debug non è importante, impostare entrambe le opzioni e vedere quale è più veloce.

Problemi correlati