gets()
पर कॉल करने से पहले यह फ़ंक्शन अधिक स्टैक स्पेस आवंटित क्यों करता है?बेकार आवंटित स्टैकस्पेस?
echo:
pushl %ebp
movl %esp, %ebp
pushl %ebx
leal -8(%ebp), %ebx
subl $20, %esp <-- Why so much space?
movl %ebx, (%esp)
call gets
...
इसी सी कोड:
void echo()
{
char buf[4];
gets(buf);
puts(buf);
}
क्यों बफर और तर्क के लिए हो जाता है के बीच तीन शब्दों का एक अतिरिक्त अतिरिक्त जगह है?
stack http://s8.postimage.org/h2niz1kut/stack.png
संरेखण। संरेखण हर जगह! –
@ एच 2CO3 स्टैक फ्रेम के लिए संरेखण सम्मेलन क्या है, लिनक्स पर जीसीसी मानते हैं? – phant0m
@ phant0m यह विशिष्ट प्रोसेसर पर निर्भर करता है। i386 8 बाइट्स (निश्चित नहीं) हो सकता है जबकि AVX2 32 हो सकता है (फिर से सुनिश्चित नहीं)। बाइनरी में जुड़े स्थिर पुस्तकालयों को मिलान करने की आवश्यकता है। – Potatoswatter