¿Cómo deshabilitar las optimizaciones del compilador en gcc?
compiler-optimization compiler-options (5)
La opción gcc -O
habilita diferentes niveles de optimización. Use -O0
para desactivarlos y use -S
para producir ensamblaje. -O3
es el nivel más alto de optimización.
Comenzando con gcc 4.8, el nivel de optimización -Og
está disponible. Permite optimizaciones que no interfieren con la depuración y es el valor predeterminado recomendado para el ciclo de edición-compilación-depuración estándar.
Para cambiar el dialecto del ensamblaje a intel o att usa -masm=intel
o -masm=att
.
También puede habilitar ciertas optimizaciones manualmente con -fname
.
Eche un vistazo al manual de gcc por mucho más.
Estoy tratando de aprender el lenguaje ensamblador. He buscado y encontrado cómo desensamblar un archivo .c
pero creo que produce una versión optimizada del programa. ¿Hay alguna manera para que pueda ver el código de ensamblaje exacto que corresponde a mi archivo C?
Para gcc, desea omitir las opciones -O1 -O2 u -O3 que se pasen al compilador o, si ya las tiene, puede agregar la opción -O0 para desactivarla nuevamente. También podría ayudarlo a agregar -g para la depuración para que pueda ver la fuente c y el código de máquina desensamblado en su depurador.
Ver también: http://sourceware.org/gdb/onlinedocs/gdb/Optimized-Code.html
Para probar sin elisión de copia y verte copiar / mover constructores / operadores en acción añade "-fno-elide-constructors".
Incluso sin optimizaciones (-O0), GCC y Clang seguirán haciendo elisión de copia, que tiene el efecto de omitir los constructores de copia / movimiento en algunos casos. Vea esta pregunta para los detalles sobre la elisión de copia.
Sin embargo, en Clang 3.4 desencadena un error (un objeto temporal no válido sin el constructor de llamada), que se repara en 3.5.
Puede deshabilitar optimizaciones si pasa -O0 con la línea de comando gcc.
Por ejemplo, para convertir un archivo .C en una llamada de archivo .S:
gcc -O0 -S test.c
Use el interruptor -O0 (- [mayúscula o] [cero]) para deshabilitar la optimización y -S para obtener el archivo de ensamblaje. Mire here para ver más opciones de línea de comando de gcc.