2012-08-23 7 views
5

मैं Microsoft's documentation पढ़ा है, लेकिन योजना तो अजीब है, मैंने सोचा कि मैं चाहता हूँ यकीन है कि मैं इसे सही ढंग से समझ रहा हूँ बनाने के लिए दोहरी जांच ...64 बुला सम्मेलन (ढेर) और varargs

मेरे समझ

--- bottom of stack --- 
(return address) 
[shadow space for arg 1] 
[shadow space for arg 2] 
[shadow space for arg 3] 
[shadow space for arg 4] 
arg N 
arg N - 1 
arg N - 2 
... 
arg 6 
arg 5 
---- top of stack ----- 

यह बहुत अजीब जब va_arg और इस तरह लागू करने लगता है ... यह वास्तव में सही है: सामान्य तरीका है जिसके द्वारा मानकों पारित कर रहे हैं इस है? (सबसे हाल ही में धक्का दे दिया)

+0

यह सही नहीं हो सकता है: http://msdn.microsoft.com/en-us/library/ew5tede7 –

+0

के अनुसार तर्क 1-4 के लिए छाया स्थान वापसी पते के निकट है, इसके अलावा वापसी का पता भी है ढेर के नीचे, शीर्ष पर नहीं। –

+0

@ हैरीजोस्टन: ओह मेरे बुरे, तुम सही हो, धन्यवाद ... यकीन नहीं कि मैं वहां क्या सोच रहा था; तय की। क्या बाकी सही हैं? – Mehrdad

उत्तर

6

सही आरेख

--- Bottom of stack --- RSP + size  (higher addresses) 
arg N 
arg N - 1 
arg N - 2 
... 
arg 6 
arg 5 
[shadow space for arg 4] 
[shadow space for arg 3] 
[shadow space for arg 2] 
[shadow space for arg 1] 
(return address) 
---- Top of stack ----- RSP   (lower addresses) 
[grows downward] 

वापसी पता ढेर के शीर्ष पर है, इसके बाद छाया अंतरिक्ष से पहले चार पैरामीटर, पैरामीटर 5 और आगे के बाद के लिए।

पैरामीटर दाएं से बाएं धक्का दिए जाते हैं: अंतिम पैरामीटर (एन) पहले धक्का दिया जाता है, इसलिए यह ढेर के नीचे सबसे नज़दीक है।

+0

पकड़ो - ढेर नीचे बढ़ता है, है ना? तो धक्का देने वाला पहला आइटम * शीर्ष * के निकटतम है? जैसा कि दूसरी वाक्य में है: http://msdn.microsoft.com/en-us/library/ew5tede7 –

+0

@ हैरीजोहनस्टन चूंकि ढेर नीचे की ओर बढ़ते हैं, स्टैक के शीर्ष पर मौजूद आइटम (हाल ही में धक्का दिया गया) सबसे कम पता है। स्थानीय चर के लिए स्थान घटाए जाने के बाद यह स्टैक फ्रेम के नीचे है। ढेर फ्रेम = पैरामीटर [नीचे], वापसी पता [मध्य], स्थानीय [शीर्ष]। आरेख देखें। आप संपूर्ण स्टैक फ्रेम के साथ पैरामीटर स्पेस को भ्रमित कर रहे हैं। –

+0

हां, मुझे निश्चित रूप से मेरी शब्दावली उलझन में थी। मैं अभी भी संदर्भित एमएसडीएन आलेख में वाक्य के अर्थ के बारे में थोड़ा परेशान हूं - क्या इसका मतलब यह है कि कैलिफ़ोर्निया * के बिंदु से पैरामीटर क्षेत्र स्टैक * के नीचे है? –

संबंधित मुद्दे