सी में से आप में से कई जानते हैं, स्टैक वह जगह है जहां सभी स्थानीय चर रहते हैं। पिछली आउट डेटा संरचना में पहली बार स्टैक का मतलब है कि आप केवल उस पर पहुंच सकते हैं जिसे हाल ही में उस पर धक्का दिया गया है।स्थानीय चर के लिए स्टैक का उपयोग करने के पीछे क्या विचार है?
int k = 5;
int j = 3;
short int i;
if (k > j) i = 1;
जाहिर है इस बेकार कोड जो कोई वास्तविक अर्थ नहीं है है, लेकिन मैं कुछ चारों ओर मेरे सिर लपेटो करने कोशिश कर रहा हूँ: तो निम्नलिखित कोड दिया।
संक्षिप्त int के लिए मैं घोषणा करता हूं कि मुझे लगता है कि 2 बाइट स्टैक पर आवंटित किए गए हैं। पूर्णांक कश्मीर और दोनों 4 बाइट के लिए इंट जे के लिए मैं करने के लिए अगर बयान आप पूर्णांक पॉप करने के लिए होगा के लिए इस प्रकार
---------- <- stack pointer
int i
----------
int k = 5
----------
int j = 3
----------
तो मान 5 और 3 के साथ आवंटित हो तो ढेर लगेगा परिस्थितियों के और जे, और यदि ऐसा है तो मैं कहाँ जाता हूं? यह सब बहुत समय लेने वाला और थकाऊ लगता है अगर ऐसा होता है कि सी स्थानीय चर करता है।
तो क्या वास्तव में यह सी कैसे करता है या मैं इसे सब खत्म कर रहा हूं?
वास्तव में स्टैक पर वस्तुओं का आपका लेआउट गलत है, क्योंकि मैं छोटा हूं, int नहीं। और एक ढेर स्मृति में नीचे की ओर बढ़ता है, ऊपर की ओर नहीं और स्थानीय चर को स्टैक पर, विपरीत क्रम में रखा जाता है। अनियंत्रित, स्थानीय ढेर पर कोई भी मूल्य ढेर पॉइंटर से ऑफसेट होने के बजाय पॉप नहीं किया जाता है, इसलिए 'के' परिणामों का जिक्र करते हुए "स्पैम शब्द (कुछ रजिस्टर) में स्पॉट [ऑफसेट से के)" के समान होता है। 'परिवर्तनीय। और 'i' को "आधा शब्द एसपी [ऑफसेट से i] के रूप में सेट किया गया है (रजिस्टर के निचले हिस्से में जिसमें के + जे का परिणाम होता है) सामान्य रूप से आप स्टैक को विभाजन के साथ लंबी श्रृंखला के रूप में सोच सकते हैं – user3629249