2010-03-06 15 views
8

Posso esaminare l'ottimizzazione utilizzando il profiler, la dimensione del file eseguibile e il tempo necessario per l'esecuzione.come vedere il codice ottimizzato in c

Posso ottenere il risultato dell'ottimizzazione. Ma ho queste domande,

  • Come ottenere il codice C ottimizzato.
  • Quale algoritmo o metodo utilizzato da C per ottimizzare un codice.

Grazie in anticipo.

risposta

11

è possibile avere un'idea dell'ottimizzazione utilizzando l'opzione -fdump-tree-optimized con gcc. e otterrai un file ottimizzato. non puoi eseguire il codice ma usando ciò puoi avere un'idea di ottimizzazione. non dimenticare di includere -O2 o -O3 o qualche altro livello.

8

Generalmente il codice non è ottimizzato come C. Di solito i passaggi di ottimizzazione vengono eseguiti molto tempo dopo che il C è stato convertito in una qualche forma di rappresentazione intermedia che è più semplice per un compilatore di lavorare con la memoria. Pertanto, una risposta diretta alla tua domanda è che il codice C ottimizzato non esiste mai.

+0

Sì, posso ottenere il codice assembler utilizzando il comando objdump -s. e possiamo produrre codice assembly usando cc -S – sganesh

+0

Ma se so come sta facendo l'ottimizzazione posso provare ad implementare il mio ottimizzazione – sganesh

+1

L'ottimizzazione della C effettiva è praticamente impossibile da fare in modo significativo. La maggior parte dei tipi di algoritmi di analisi statici sono progettati per funzionare su una qualche forma di codice "a tre indirizzi" già tradotto da un compilatore. Gli algoritmi sono più facili da scrivere quando i dati su cui operano sono più semplici. Inizia con il "libro dei draghi" e inizia da lì. (http://en.wikipedia.org/wiki/Dragon_Book_(computer_science)) –

7

Un compilatore C di solito non produce C ottimizzato in qualsiasi momento. Piuttosto, il compilatore trasforma C in una rappresentazione interna semplificata e la maggior parte delle ottimizzazioni del compilatore verrà eseguita su one or more of those intermediate representations. Quindi il compilatore genera assembly o un binario da quello.

Il più vicino possibile è probabilmente quello di compilare un file all'assemblaggio senza ottimizzazione e di nuovo con l'ottimizzazione più alta, quindi confrontare l'output dell'assieme. Dovrai avere una buona conoscenza del linguaggio assembly per farlo. Se si utilizza gcc, leggere le opzioni -S e -O su come eseguire (o non fare) questo.

Se il tuo obiettivo è scrivere codice più veloce, quindi, la soluzione migliore è scrivere una C migliore utilizzando algoritmi e strutture dati migliori al livello C usando attentamente il profiler.

Se il tuo obiettivo è solo capire l'ottimizzazione, prova Program Optimization e Compiler Optimization su Wikipedia per alcune informazioni generali.

+0

+1 per l'esame di assemblatore. –

+0

Sto usando solo gcc. So di -S e -O1, 2,3 livelli Ma voglio sapere il metodo per ottimizzare un codice. Solo allora posso provare la mia ottimizzazione – sganesh

+1

@sganesh: Quindi la domanda dovrebbe essere: Come posso iniziare a scrivere un ottimizzatore di codice? Provare a decodificare ciò che fanno gli altri compilatori non ti aiuterà. Se vuoi farlo, guarda il loro codice sorgente. –

-2

se si capisce l'assemblatore, è possibile ispezionare il codice generato dall'assemblatore dal compilatore.

+0

Vero - ma questo non ha nulla a che fare con la domanda dell'OP ... per non parlare dei pappagalli Jessie Mikkikan ha risposto che era 4 minuti prima del tuo ... –

2

Se si utilizza GCC, utilizzare un argomento per ottimizzare il codice e utilizzare --save-temps come argomento. Tutti dicono che il codice C non è ottimizzato come C quando la compilazione con GCC è errato in una certa misura. Scrivi un generatore di sequenze di Fibonacci ricorsivo in C e leggi il codice preelaborato. L'argomento summenzionato salva anche l'assembly generato nella directory da cui GCC è chiamato. Se ti senti più a tuo agio con l'assembly della sintassi Intel, usa anche -masm = intel come argomento.

+0

In gcc, --save-temps è usato per memorizzare il file preelaborato . usando -E possiamo vedere quel file. Ma --save-temps memorizzerà questo file in modo permanente. – sganesh

Problemi correlati