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:

https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

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!



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow