निम्नलिखित सी कोडमेरा स्टैक पॉइंटर केवल 16 के गुणकों में क्यों बढ़ रहा है?
void func() {
int a=1,b=2,c=3;
}
gcc -S -O -o- myfile.c
का उपयोग कर संकलन का उपयोग करते हुए मैं उत्पादन
.file "myfile.c"
.intel_syntax noprefix
.text
.globl func
.type func, @function
func:
push ebp
mov ebp, esp
sub esp, 16
mov DWORD PTR [ebp-4], 1
mov DWORD PTR [ebp-8], 2
mov DWORD PTR [ebp-12], 3
mov DWORD PTR [ebp-16], 4
mov DWORD PTR [ebp-20], 5
leave
ret
.size func, .-func
.ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5"
.section .note.GNU-stack,"",@progbits
यहाँ मैं func:
के बाद तीसरी लाइन sub esp,12
बजाय sub esp,16
होने की अपेक्षा करेंगे मिलती है। मैंने फ़ंक्शन में स्वचालित चर के विभिन्न नंबरों के साथ खेला और पाया कि यह 16 बाइट्स की वृद्धि में बढ़ता है। ऐसा क्यों होता है? क्या यह सभी प्लेटफार्मों पर होता है, या यह मंच विशिष्ट है?
मैं वर्तमान के साथ OSX एक इंटेल मैक चल रहा हूँ, एक Ubuntu (32-बिट) VirtualBox के अतिथि जीसीसी का उपयोग कर के माध्यम से संकलन।
और संकलक यह क्यों करते हैं कि स्मृति निर्देशों तक पहुंचने के कुछ निर्देश * नहीं * गठबंधन प्रदर्शन प्रदर्शन प्राप्त करते हैं। – vidstige
धन्यवाद, इस सवाल का जवाब और vidstige की टिप्पणी के बीच मैं जानकारी मैं :) –
@vidstige @Martin की जरूरत है: या वे दुर्घटना, यहां तक कि 86 पर (movaps देखते हैं, जैसे)। – Bahbar