खोज…


परिचय

GNU संकलक संकलन प्रक्रिया के लिए विभिन्न स्तर के अनुकूलन प्रदान करता है। इन अनुकूलन का उपयोग कोड प्रदर्शन और / या कोड आकार में सुधार करने के लिए किया जाता है। आमतौर पर अनुकूलन के साथ एक कोड संकलित करने में पूरा होने में अधिक समय लगता है।

यह कमांड आपको बताता है कि आपके सिस्टम पर क्या अनुकूलन उपलब्ध हैं: $ gcc -Q --help = अनुकूलन

यहाँ अनुकूलन को नियंत्रित करने के लिए विकल्पों का एक विस्तृत दस्तावेज दिया गया है:

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

O0 और O3 के साथ संकलित कोड के बीच अंतर

मैंने एक साधारण सी कोड foo.c लिखा

int main()
{
    int i = 0;
    int j = 0;
    for (i = 0; i < 5; i++) {
            j = i + 1;
    }
    return 0;
}

-O0 के साथ संकलित होने पर अर्थात सभी कंपाइलर अनुकूलन को अक्षम करके

$ gcc -o foo.S foo.c -O0 -S

मुझे यह मिल गया:

    .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 ने मेरे कोड को असेंबली लैंग्वेज वर्बेटिम में बदलने के लिए सारा दर्द झेला।

लेकिन जब मैंने ओ ३ म् के साथ अपने कोड को संकलित किया, यानी उच्चतम स्तर के अनुकूलन के साथ

मुझे यह मिल गया:

.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

जीसीसी समझ गया कि मैं सिर्फ डूडलिंग कर रहा हूं और चर और पाश के साथ कुछ भी महत्वपूर्ण नहीं कर रहा हूं। इसलिए इसने मुझे बिना किसी कोड के एक रिक्त स्टब छोड़ दिया।

DAYUM!



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow