gcc
GCC-optimeringar
Sök…
Introduktion
GNU-kompilatorn erbjuder olika nivåer av optimeringar för sammanställningsprocessen. Dessa optimeringar används för att förbättra kodprestanda och / eller kodstorlek. Det tar normalt längre tid att sammanställa en kod med optimeringar på.
Det här kommandot berättar vilka optimeringar som finns tillgängliga på ditt system: $ gcc -Q --help = optimeringar
Här är en detaljerad dokumentation av alternativ för att kontrollera optimeringar:
Skillnad mellan koder sammanställda med O0 och O3
Jag skrev en enkel C-kod foo.c
int main()
{
int i = 0;
int j = 0;
for (i = 0; i < 5; i++) {
j = i + 1;
}
return 0;
}
När kompilerad med -O0, dvs genom att inaktivera alla kompilatoroptimeringar
$ gcc -o foo.S foo.c -O0 -S
Jag kan det här:
.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 tog all smärta för att konvertera min kod till monteringsspråk ordbok.
Men när jag samlade min kod med O3, dvs med den högsta nivån av optimeringar
Jag kan det här:
.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 förstod att jag bara doodlade och gjorde inget viktigt med variablerna och slingan. Så det lämnade mig en tom stubbe utan kod.
DAYUM!