gcc
GCC-optimalisaties
Zoeken…
Invoering
De GNU-compiler biedt verschillende optimalisatieniveaus voor het compilatieproces. Deze optimalisaties worden gebruikt om de codeprestaties en / of codegrootte te verbeteren. Het compileren van een code met optimalisaties aan, duurt meestal langer om te voltooien.
Deze opdracht vertelt u welke optimalisaties beschikbaar zijn op uw systeem: $ gcc -Q --help = optimalisaties
Hier is een gedetailleerde documentatie van opties om optimalisaties te beheren:
Verschil tussen codes gecompileerd met O0 en O3
Ik schreef een eenvoudige C-code foo.c
int main()
{
int i = 0;
int j = 0;
for (i = 0; i < 5; i++) {
j = i + 1;
}
return 0;
}
Wanneer gecompileerd met -O0, dwz door alle optimalisatie van de compiler uit te schakelen
$ gcc -o foo.S foo.c -O0 -S
Ik heb dit:
.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 deed al het mogelijke om mijn code letterlijk in assembler te converteren.
Maar toen ik mijn code compileerde met O3, dat wil zeggen met het hoogste niveau van optimalisaties
Ik heb dit:
.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 begreep dat ik gewoon doodling was en niets belangrijks deed met de variabelen en de lus. Dus het liet me een lege stub achter zonder code.
Dayum!