2009-10-08 19 views

risposta

15

http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

non c'è 'taglia unica' - è necessario comprendere la vostra applicazione, le vostre esigenze e le opzioni di ottimizzazione per determinare il sottoinsieme corretto per il binario.

O la risposta che si desidera: -O3

+0

Ho fatto e non ho potuto trovare una spiegazione diretta. Potrei solo succhiare alla ricerca però. – Polaris878

+2

Inoltre, il punto di SO è quello di apparire nei motori di ricerca come Google, quindi è meglio averlo qui comunque. – Polaris878

+0

Chiama. E 'questo quello che cercavi? O hai bisogno di un po 'più di contesto/informazioni? – Josh

3

-O2 si accenderà tutte le ottimizzazioni che non richiedono un commercio spazio \ velocità off e tende ad essere quello che vedo usato più spesso. -O3 fa un po 'di spazio per gli scambi di velocità (come la funzione inline.) -Os fa O2 plus fa altre cose per ridurre le dimensioni del codice. Questo può rendere le cose più veloci di O3 migliorando l'uso della cache. (test per scoprire se funziona per voi.) Nota ci sono un gran numero di opzioni che nessuno degli interruttori O tocco. Il motivo per cui vengono lasciati fuori è perché dipende spesso dal tipo di codice che stai scrivendo o che dipende molto dall'architettura.

7

Nota che gcc non ha una "modalità di rilascio" e una "modalità di debug" come MSVC. Tutto il codice è solo codice. La presenza delle varie opzioni di ottimizzazione (-O2 e -Os sono le uniche di cui generalmente ci si deve preoccupare a meno che non si stia eseguendo una regolazione molto fine) modifica il codice generato, ma non in un modo per impedire l'interoperabilità con altri ABI-compliant codice. Generalmente vuoi l'ottimizzazione su cose che vuoi rilasciare.

La presenza dell'opzione "-g" causerà l'inserimento di informazioni estese su codice e codice sorgente nei file generati, utile per il debug ma che aumenta la dimensione del file (e rivela il codice sorgente), che è qualcosa che spesso non vuoi nei binari "rilasciati".

Ma non sono esclusivi. È possibile avere un file binario compilato con informazioni di ottimizzazione e debug o uno con nessuno dei due.

+1

L'ottimizzazione dovrebbe essere disabilitata di solito se si intende eseguire il debug del codice generato, altrimenti il ​​debug sarà un'esperienza simile a un film di David Lynch. – caf

+0

Non è così male, guardo i dump dello stack e l'output di valgrind dai binari "release" tutto il tempo. Finché non si usa -fomit-stack-pointer e si capisce che le statiche potrebbero essere inline e invisibili, si può leggere un sacco di contesto anche da un binario fortemente ottimizzato. Se le tue funzioni sono brevi, di solito puoi capire l'espressione che si è schiantata con un'ipotesi o due. –

+0

A differenza di un film di David Lynch, tuttavia, i debugger consentono allo spettatore di passare a piacere tra i diversi livelli di realtà. Se comprendi il disassemblaggio, il passaggio a passi singoli (con le linee di origine intersperse) di solito ha un certo senso anche con l'ottimizzazione. Se non capisci lo smontaggio, allora imparerai. –

15

Ecco una parte di un Makefile che uso regolarmente (in questo esempio, si sta tentando di creare un programma denominato pippo).

Se lo si esegue come $ make BUILD=debug o $ make debug allora verrà utilizzato il Debug CFLAGS. Questi disattivano l'ottimizzazione (-O0) e includono i simboli di debug (-g).

Se si omette questi flag (eseguendo $ make senza parametri aggiuntivi), potrai costruire la versione di rilascio CFLAGS in cui l'ottimizzazione è attivata (-O2), simboli di debug spogliati (-s) e asserzioni disabilitate (-DNDEBUG) .

Come altri hanno suggerito, è possibile sperimentare diverse impostazioni -O* dipendenti dalle esigenze specifiche.

ifeq ($(BUILD),debug) 
# "Debug" build - no optimization, and debugging symbols 
CFLAGS += -O0 -g 
else 
# "Release" build - optimization, and no debug symbols 
CFLAGS += -O2 -s -DNDEBUG 
endif 

all: foo 

debug: 
    make "BUILD=debug" 

foo: foo.o 
    # The rest of the makefile comes here... 
Problemi correlati