gcc
Optimizaciones GCC
Buscar..
Introducción
El compilador GNU ofrece varios niveles de optimizaciones para el proceso de compilación. Estas optimizaciones se utilizan para mejorar el rendimiento del código y / o el tamaño del código. La compilación de un código con optimizaciones activadas, por lo general toma más tiempo en completarse.
Este comando le dice qué optimizaciones están disponibles en su sistema: $ gcc -Q --help = optimizaciones
Aquí hay una documentación detallada de las opciones para controlar las optimizaciones:
Diferencia entre códigos compilados con O0 y O3.
Escribí un código C simple foo.c
int main()
{
int i = 0;
int j = 0;
for (i = 0; i < 5; i++) {
j = i + 1;
}
return 0;
}
Cuando se compila con -O0, es decir, deshabilita todas las optimizaciones del compilador
$ gcc -o foo.S foo.c -O0 -S
Tengo esto:
.file "foo.c"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $0, -4(%rbp)
movl $0, -8(%rbp)
movl $0, -4(%rbp)
jmp .L2
.L3:
movl -4(%rbp), %eax
addl $1, %eax
movl %eax, -8(%rbp)
addl $1, -4(%rbp)
.L2:
cmpl $4, -4(%rbp)
jle .L3
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 6.2.0"
.section .note.GNU-stack,"",@progbits
GCC se tomó la molestia de convertir mi código en lenguaje ensamblador literalmente.
Pero cuando compilé mi código con O3, es decir, con el nivel más alto de optimizaciones
Tengo esto:
.file "foo.c"
.section .text.startup,"ax",@progbits
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB11:
.cfi_startproc
xorl %eax, %eax
ret
.cfi_endproc
.LFE11:
.size main, .-main
.ident "GCC: (GNU) 6.2.0"
.section .note.GNU-stack,"",@progbits
GCC entendió que solo estaba garabateando y sin hacer nada importante con las variables y el bucle. Así que me dejó un trozo en blanco sin código.
DAYUM!