2011-01-18 7 views
6

मुझे कल्पना है कि इस सवाल से हजारों बार पूछा गया है, लेकिन मुझे जवाब खोजने में बहुत भाग्य नहीं था, और यह ज़रूरत से जिज्ञासा से अधिक है।ढेर में संग्रहीत वस्तु में मूल्य प्रकार भी?

सी # के पागल और बोल्ट में खोदने के बाद, मैं सोच रहा था क्योंकि ऑब्जेक्ट्स ढेर में संग्रहीत हैं, ढेर में संग्रहीत वस्तुओं के भीतर मूल्य प्रकार हैं या वे ढेर में रखे गए हैं?

उत्तर

6

वे संदर्भ प्रकार के लिए आवंटित स्मृति के अंदर ढेर में संग्रहीत हैं। इसके अलावा, value types are often stored in places other than "the stack"। हालांकि, सीएलआई स्पेक निर्दिष्ट नहीं करता है कि मूल्य प्रकारों को संग्रहीत करने वाला मेमोरी पूल कहां रहता है - यह एक कार्यान्वयन विवरण है जो इससे कोई फर्क नहीं पड़ता।

+0

ग्रेट आलेख, धन्यवाद! – BoredOfBinary

3

वे ऑब्जेक्ट्स के साथ ढेर पर संग्रहीत हैं। इसके बारे में सोचने का एक अच्छा तरीका यह है कि जब एक वस्तु (जिसमें उसके राज्य के हिस्से के रूप में मूल्य प्रकार होते हैं) ढेर पर आवंटित किया जाता है, तो इसके मूल्य प्रकार भी वहां रहना चाहिए, अन्यथा उन मूल्य प्रकार गायब हो जाएंगे जैसे ही स्टैक अवांछित हो जाता है उस कोड के लिए जिसने ऑब्जेक्ट बनाया था।

1

हां, वे ढेर के हिस्से के रूप में संग्रहीत हैं। हालांकि, यह एक कार्यान्वयन विस्तार है, क्योंकि एरिक लिपर्ट ने कई अवसरों पर वर्णन किया है। मेरा सुझाव है कि आप इसके बारे में अपने ब्लॉग पोस्ट पढ़ें, this सबसे हालिया एक है, और thesetwo भी महत्वपूर्ण है।

+0

ग्रेट लेख, धन्यवाद! बीटीडब्ल्यू आपकी किताब से प्यार करता है, अब इसे पढ़ना होता है! – BoredOfBinary

9

एंड्रयू हरे सही है। पूरी जानकारी के लिए Eric Lippert's blog entry देखें:

मैं मिथक है कि "मूल्य प्रकार स्टैक पर जाना" से परेशान हूँ ... यह आमतौर पर गलत तरीके से कहा गया है: बयान होना चाहिए "मान प्रकार पर संग्रहीत किया जा सकता ढेर ", अधिक आम के बजाय" मूल्य प्रकार हमेशा ढेर पर संग्रहीत होते हैं "।

+1

उद्धरण के लिए +1 "मैं मिथक से परेशान हूं .." – Gabe

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