2010-03-06 16 views
8

Puedo examinar la optimización utilizando el generador de perfiles, el tamaño del archivo ejecutable y el tiempo de ejecución.cómo ver el código optimizado en c

Puedo obtener el resultado de la optimización. Pero tengo estas preguntas,

  • Cómo obtener el código C optimizado.
  • Qué algoritmo o método utilizó C para optimizar un código.

Gracias de antemano.

Respuesta

11

puede obtener una idea de optimización utilizando la opción -fdump-tree-optimized con gcc. y obtendrá un archivo optimizado. no puede ejecutar el código pero al usarlo puede tener una idea de optimización. no olvide incluir -O2 o -O3 o algún otro nivel.

8

Por lo general, el código no se optimiza como C. Normalmente, las pasadas de optimización se realizan mucho después de que la C se haya convertido en una representación intermedia más fácil para un compilador en la memoria. Por lo tanto, una respuesta directa a su pregunta es que el código C optimizado nunca existe.

+0

sí, puedo obtener el código de ensamblador usando el comando objdump -s. y podemos producir código ensamblador usando cc -S – sganesh

+0

Pero si sé cómo está haciendo la optimización puedo intentar implementar mi propia optimización – sganesh

+1

Optimizar la C real no es posible de hacer de manera significativa. La mayoría de los tipos de algoritmos de análisis estáticos están diseñados para funcionar en algún tipo de código de "tres direcciones" ya traducido por un compilador. Los algoritmos son más fáciles de escribir cuando los datos en los que operan son más simples. Comienza con el "libro del dragón" y trabaja desde allí. (http://en.wikipedia.org/wiki/Dragon_Book_(computer_science)) –

7

Un compilador de C generalmente no produce C optimizado en ninguna etapa. Más bien, el compilador convierte a C en una representación interna simplificada, y la mayoría de las optimizaciones del compilador se realizarán en one or more of those intermediate representations. Entonces el compilador genera ensamblaje o un binario a partir de eso.

Lo más cercano que puede obtener es, probablemente, compilar un archivo para ensamblar sin optimización y de nuevo con la optimización más alta, y luego comparar el resultado del conjunto. Deberá tener una buena comprensión del lenguaje ensamblador para hacer eso. Si está utilizando gcc, lea acerca de los interruptores -S y -O para saber cómo hacer (o no hacer) esto.

Si su objetivo es escribir un código más rápido, entonces, su mejor opción es escribir mejor C mediante el uso de mejores algoritmos y estructuras de datos en el nivel C mediante el uso cuidadoso del generador de perfiles.

Si su objetivo es solo comprender la optimización, intente con Program Optimization y Compiler Optimization en Wikipedia para obtener información general.

+0

+1 para el examen del ensamblador. –

+0

Estoy usando gcc solamente. Sé acerca de -S y -O1, 2,3 niveles Pero quiero saber el método para optimizar un código. Entonces solo puedo probar mi propia optimización – sganesh

+1

@sganesh: Entonces la pregunta debería ser: ¿Cómo puedo empezar a escribir un optimizador de código? Intentar aplicar ingeniería inversa a lo que otros compiladores están haciendo no lo ayudará. Si quieres hacer eso, solo mira su código fuente. –

-2

si comprende el ensamblador, puede inspeccionar el código generado por el compilador.

+0

Cierto, pero esto realmente no tiene nada que ver con la pregunta del OP ... por no mencionar la respuesta de los loros Jessie Mikkikan que fue 4 minutos antes que la tuya ... –

2

Si está utilizando GCC, use un argumento para optimizar el código y use --save-temps como argumento. Todo el mundo que dice que el código C no está optimizado como C cuando compila con GCC está equivocado hasta cierto punto. Escriba un generador de secuencia de Fibonacci recursivo en C y lea el código preprocesado. El argumento mencionado también guarda el ensamblaje generado en el directorio desde el que se llama a GCC. Si está más cómodo con el ensamblaje de sintaxis Intel, use -masm = intel como argumento también.

+0

En gcc, --save-temps se usa para almacenar el archivo preprocesado . usando -E podemos ver ese archivo. Pero el --save-temps almacenará este archivo permanentemente. – sganesh

Cuestiones relacionadas