मैं कैसे कुछ C/C++ सुविधाओं की जांच के लिए विधानसभा में अनुवाद किया गया था और मैं निम्नलिखित फ़ाइल बनाई:जीसीसी अनावश्यक असेंबली कोड क्यों बनाता है?
struct foo {
int x;
char y[0];
};
char *bar(struct foo *f)
{
return f->y;
}
मैं तो gcc -S
के साथ इस संकलित (और यह भी कोशिश की g++ -S
के साथ) लेकिन जब मैं को देखा विधानसभा कोड, मैं बार समारोह है कि मैंने सोचा था कि gcc
दूर अनुकूलन करने के लिए सक्षम होना चाहिए में एक छोटी सी अतिरेक बात से निराश थे: लाइनों
_bar:
Leh_func_begin1:
pushq %rbp
Ltmp0:
movq %rsp, %rbp
Ltmp1:
movq %rdi, -8(%rbp)
movq -8(%rbp), %rax
movabsq $4, %rcx
addq %rcx, %rax
movq %rax, -24(%rbp)
movq -24(%rbp), %rax
movq %rax, -16(%rbp)
movq -16(%rbp), %rax
popq %rbp
ret
Leh_func_end1:
अन्य बातों के अलावा,
012,351, movq %rax, -24(%rbp)
movq -24(%rbp), %rax
movq %rax, -16(%rbp)
movq -16(%rbp), %rax
व्यर्थ रूप से अनावश्यक लग रहा है। क्या कोई कारण जीसीसी (और संभवतः अन्य कंपाइलर्स) इसे अनुकूलित नहीं कर सकता/सकती है?
कृपया मानक अनुकूलन सक्षम करने के लिए -O स्विच के साथ जीसीसी चलाएं। –
जीसीसी का कौन सा संस्करण आप उपयोग कर रहे हैं? –