gcc
जीसीसी अनुकूलन
खोज…
परिचय
GNU संकलक संकलन प्रक्रिया के लिए विभिन्न स्तर के अनुकूलन प्रदान करता है। इन अनुकूलन का उपयोग कोड प्रदर्शन और / या कोड आकार में सुधार करने के लिए किया जाता है। आमतौर पर अनुकूलन के साथ एक कोड संकलित करने में पूरा होने में अधिक समय लगता है।
यह कमांड आपको बताता है कि आपके सिस्टम पर क्या अनुकूलन उपलब्ध हैं: $ gcc -Q --help = अनुकूलन
यहाँ अनुकूलन को नियंत्रित करने के लिए विकल्पों का एक विस्तृत दस्तावेज दिया गया है:
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!