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.
sí, puedo obtener el código de ensamblador usando el comando objdump -s. y podemos producir código ensamblador usando cc -S – sganesh
Pero si sé cómo está haciendo la optimización puedo intentar implementar mi propia optimización – sganesh
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)) –