2009-12-29 14 views
5

http://msdn.microsoft.com/en-us/library/ms229017.aspx के अनुसार, मूल्य प्रकार "स्टैक या अन्य संरचनाओं के साथ इनलाइन * पर आवंटित किए जाते हैं"। फिर भी the stack is an implementation detail में, एरिक लिपर्ट ने कहा कि यह एक कार्यान्वयन विस्तार है।ढेर एक कार्यान्वयन विस्तार है, या नहीं?

मेरी समझ के लिए, एक कार्यान्वयन विवरण "a behavior produced by code which may be relied on by consuming code, though that behavior is not specified by the spec the code is written to." है। मैं समझता हूं कि दस्तावेज़ीकरण एक विनिर्देश नहीं है, हालांकि संभवतः अगर दस्तावेज़ में कुछ सूचीबद्ध है तो हम उस पर भरोसा कर सकते हैं और यह अब एक प्रवर्तन विवरण नहीं है। तो, क्या एक कार्यान्वयन विस्तार ढेर है या नहीं?

*: मैं इसका मतलब यह समझता हूं कि ढेर सीधे ढेर पर बजाय अन्य लोगों के अंदर भी आवंटित किया जा सकता है, हालांकि मैं गलत हो सकता था।

+0

प्रश्न से संबंधित: http://stackoverflow.com/questions/1970894/struct-what-is-it-for/1970902#1970902 –

+0

मैंने बस कुछ समय पहले डुप्लिकेट के रूप में फ़्लैग किया :) – RCIX

उत्तर

11

एमएसडीएन दस्तावेज आपको विशेष कार्यान्वयन के बारे में बता रहा है जो माइक्रोसॉफ्ट सी # कंपाइलर struct के लिए उपयोग करता है। उन विशेष विवरण ईसीएमए 334 सी # विनिर्देश में नहीं हैं; वे struct एस के अर्थशास्त्र का हिस्सा नहीं हैं। इसलिए, दस्तावेज में उन विवरण कार्यान्वयन विवरण हैं।

मुझे लगता है कि कहीं कहीं एरिक लिपर्ट पढ़ना याद है कि वह चाहता है (या पसंद करता है, मुझे याद नहीं है कि उसने किस स्तर की प्राथमिकता प्रदान की है) दस्तावेज ने struct एस के संबंध में ढेर का कोई उल्लेख नहीं किया है। मैं देखूंगा कि मैं इसे खोद सकता हूं या नहीं।

यहाँ है, ब्लॉग पोस्ट है कि आप से जुड़ा हुआ से:

मुझे खेद है कि प्रलेखन क्या सबसे अधिक प्रासंगिक है पर ध्यान केंद्रित नहीं करता है; बड़े पैमाने पर अप्रासंगिक कार्यान्वयन विस्तार पर ध्यान केंद्रित करके, हम उस कार्यान्वयन के विस्तार के महत्व को बढ़ाते हैं और मूल्य के प्रकार को अर्थपूर्ण रूप से उपयोगी बनाने के महत्व को अस्पष्ट करते हैं। मैं बहुत इच्छा करता हूं कि ये सभी लेख बताते हैं कि "स्टैक" क्या है, इसके बजाय समझाता है कि वास्तव में "मूल्य द्वारा प्रतिलिपि" का अर्थ क्या है और "मूल्य द्वारा प्रतिलिपि" को गलतफहमी या दुरुपयोग करने से बग का कारण बन सकता है।

ईसीएमए 334 सी # विनिर्देश का प्रासंगिक खंड §11 है। ध्यान दें कि इस खंड में "स्टैक" शब्द का कभी भी उपयोग नहीं किया जाता है। अनुभाग केवल सिंटैक्स को बताता है, struct एस अनुवर्ती मूल्य अर्थशास्त्र, कि वे System.ValueType से पूर्ण रूप से मुहरबंद और उत्तराधिकारी हैं, struct प्रकार के चर के लिए असाइनमेंट एक प्रतिलिपि बनाता है, जो struct को मानकर पैरामीटर के रूप में पास करता है, एक प्रति बनाता है, कैसे struct रों (struct में सभी मान प्रकार खेतों उनके डिफ़ॉल्ट मानों की तैयारी में हैं, और सभी संदर्भ प्रकार क्षेत्रों null की तैयारी में हैं) डिफ़ॉल्ट मानों के लिए सेट कर रहे हैं, मुक्केबाजी और struct की unboxing, struct रों लिए this का अर्थ आसपास के नियम , और क्षेत्र प्रारंभिकरण, रचनाकार, विनाशक और स्थिर रचनाकार struct एस के लिए कैसे काम करते हैं। फिर, ढेर का कोई जिक्र नहीं। कभी।

ढेर एक कार्यान्वयन विस्तार है, struct के अर्थशास्त्र का हिस्सा नहीं है।

1

सी # वैल्यू प्रकारों के लिए 'स्टैक' एक कार्यान्वयन विस्तार है क्योंकि मूल्य प्रकार पर किए गए प्रत्येक सुरक्षित ऑपरेशन वैसे ही व्यवहार करेगा, चाहे ढेर या ढेर पर संरचना आवंटित की गई हो।

ऑपरेशंस जिसके लिए यह एक अंतर (यानी एक विलुप्त स्टैक फ्रेम को संदर्भित करने में समाप्त होता है), जैसे पता लेना और सीधे इसका उपयोग करना (उदाहरण के लिए विरासत एपीआई के माध्यम से) असुरक्षित और गलत उपयोग (यानी नहीं। मार्शलिंग एपीआई का उपयोग करना)।

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