gcc
GCC-Optimierungen
Suche…
Einführung
Der GNU-Compiler bietet verschiedene Optimierungsstufen für den Kompilierungsprozess. Diese Optimierungen werden verwendet, um die Codeleistung und / oder die Codegröße zu verbessern. Das Kompilieren eines Codes mit aktivierten Optimierungen dauert in der Regel länger.
Dieser Befehl gibt an, welche Optimierungen auf Ihrem System verfügbar sind: $ gcc -Q --help = Optimierungen
Hier ist eine ausführliche Dokumentation der Optionen zur Steuerung von Optimierungen:
Unterscheidung zwischen mit O0 und O3 kompilierten Codes
Ich habe einen einfachen C-Code foo.c geschrieben
int main()
{
int i = 0;
int j = 0;
for (i = 0; i < 5; i++) {
j = i + 1;
}
return 0;
}
Beim Kompilieren mit -O0, dh durch Deaktivieren aller Compiler-Optimierungen
$ gcc -o foo.S foo.c -O0 -S
Ich habe das bekommen:
.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 hat sich die Mühe gemacht, meinen Code wörtlich in Assemblersprache zu konvertieren.
Aber als ich meinen Code mit O3 kompiliert habe, dh mit den höchsten Optimierungen
Ich habe das bekommen:
.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 verstand, dass ich nur kritzelte und nichts Wichtiges mit den Variablen und der Schleife machte. So blieb mir ein leerer Stich ohne Code.
DAYUM!