द्वारा हटा दिया एक खाली कार्यक्रमसमारोह प्रस्तावना और उपसंहार जीसीसी अनुकूलन
//demo.c
int main(void)
{
}
डिफ़ॉल्ट अनुकूलन पर कार्यक्रम संकलन ले रहा है।
gcc -S demo.c -o dasm.asm
मैं अब -O2 अनुकूलन पर कार्यक्रम संकलन के रूप में
//Removed labels and directive which are not relevant
main:
pushl %ebp // prologue of main
movl %esp, %ebp // prologue of main
popl %ebp // epilogue of main
ret
विधानसभा उत्पादन मिलता है।
gcc -O2 -S demo.c -o dasm.asm
मैं अनुकूलित विधानसभा
main:
rep
ret
मिल मेरी प्रारंभिक खोज में, मैंने पाया है कि अनुकूलन झंडा -fomit फ्रेम-सूचक प्रस्तावना और उपसंहार को हटाने के लिए जिम्मेदार था।
मुझे gcc compiler manual में ध्वज के बारे में अधिक जानकारी मिली, लेकिन प्रस्तावना और उपहास को हटाने के लिए मैन्युअल द्वारा दिए गए इस कारण को नीचे नहीं समझा जा सका।
फ़्रेम पॉइंटर को उन कार्यों के लिए रजिस्टर में न रखें जो की आवश्यकता नहीं है।
क्या उपरोक्त कारण डालने का कोई अन्य तरीका है?
"rep"
निर्देश का कारण क्या है, -02 अनुकूलन पर दिख रहा है?
मुख्य कार्य क्यों करता है, स्टैक फ्रेम प्रारंभिकता की आवश्यकता नहीं होती है?
यदि फ्रेम सूचक की स्थापना मुख्य कार्य के भीतर से नहीं की जाती है, तो यह काम कौन करता है?
क्या यह ओएस द्वारा किया जाता है या यह हार्डवेयर की कार्यक्षमता है?
'प्रतिनिधि ret' एक उपसर्ग है कि अर्थ विज्ञान में परिवर्तन नहीं करता के साथ एक' ret' है, यह कुछ एएमडी प्रोसेसर खुश (उनमें से कुछ के लिए सीधे कूद के लिए एक दंड है रहता है एक 'ret')। – harold
[जीसीसी फ़ंक्शन प्रस्तावना ओवरहेड से बचें] का संभावित डुप्लिकेट? (Http://stackoverflow.com/questions/5477673/avoiding-gcc-function-prologue-overhead) – mlt