कि आप जानते होंगे, वहाँ मूल कोड सी # कोड से कई कदम हैं उन हैं:
- सी # से आईएल (बाईटकोड)
- बाईटकोड से मूल कोड को JITting के संकलन
सी # उस समय का कोई नियंत्रण नहीं है जब स्मृति आवंटित की जाती है, जिसे आप बाध्यकारी पर कॉल करते हैं, यह पूरी तरह से जेआईटी तक है। इसे देखने के तरीके से देखें कि सी # के नियंत्रण में है। सी # द्वारा उत्पादित बाइट कोड को CLR ECMA मानक का पालन करना होगा। यदि हम विभाजन 1 की धारा 12.1.6.1 पर जाते हैं, तो हम देखेंगे कि मानक परिभाषित करता है कि स्थानीय चर के घर विधि शीर्षलेख में है। चूंकि एक नियम के रूप में विधि हस्ताक्षर एक सूची में किसी विधि की शुरुआत में दिखाई देते हैं, इसलिए आपको एक (झूठी) इंप्रेशन मिलता है कि वे बाध्य अपफ्रंट हैं, जो वास्तव में मामला हो सकता है या नहीं भी हो सकता है।
यदि आप संकलित देशी कोड को देख रहे हैं, तो परिणाम प्लेटफ़ॉर्म से प्लेटफ़ॉर्म तक भिन्न हो सकता है। स्थानीय चर के लिए सीपीयू स्टैक पर ऐतिहासिक रूप से आवंटित स्थान को स्टैक पॉइंटर बदलने के एक सीपीयू निर्देश द्वारा किया जाता है। यदि आप इसे चर द्वारा परिवर्तनीय करना चाहते हैं तो आपके पास कई निर्देश, एक प्रति चर, जो कम कुशल है। यही कारण है कि, कम से कम x86 पर आप यह देखने जा रहे हैं कि सीपीयू स्टैक पर स्थान आवंटित किया गया है।
स्रोत
2012-02-02 00:40:07
स्टैक आकार को समायोजित करना क्यों बढ़ता जा रहा है, इसे सभी को आगे आरक्षित करने से बेहतर होगा? – ildjarn
संभवतः, स्टैक के साथ गड़बड़ करने में कुछ समय लगता है ... अगर मेरे पास बहुत से स्थानीय चर हैं, तो मुझे तब तक इंतजार क्यों करें जब तक मुझे अभी तक (अभी तक) नहीं है? – GWLlosa
ठीक है, इसमें स्टैक के साथ गड़बड़ करने में कुछ समय लगता है, इसलिए हर बार एक नए चर के दायरे में प्रवेश करने के बजाए इसे ऊपर और ऊपर की तरफ मोड़ना ठीक है। – ildjarn