2012-01-21 10 views
11

सीएलआर कक्षा का मेमोरी लेआउट क्या है?सीएलआर कक्षा मेमोरी लेआउट

सी ++ पृष्ठभूमि से आ रहा है, वर्चुअल फ़ंक्शंस वाले सी ++ क्लास का मेमोरी लेआउट एक वी-टेबल पॉइंटर से शुरू होता है, और उसके बाद कक्षा के डेटा सदस्य स्मृति में अनुसरण करते हैं।

वर्चुअल फ़ंक्शंस वाले सीएलआर कक्षाओं में वी-टेबल सूचक है? क्या यह पॉइंटर क्लास मेमोरी लेआउट में पहला फ़ील्ड है? प्रोग्रामर के परिभाषित डेटा सदस्यों के अलावा सीएलआर क्लास मेमोरी लेआउट में कोई अतिरिक्त फ़ील्ड हैं? और ये अतिरिक्त क्षेत्र क्या दर्शाते हैं?

+0

सी # कक्षाओं का मेमोरी लेआउट आमतौर पर जिटर द्वारा निर्धारित किया जाता है और इस प्रकार केवल रनटाइम पर प्रकट होता है (हालांकि कुछ अपवाद हैं)। – Yahia

+3

सी # मेमोरी लेआउट के बारे में कुछ भी कहना नहीं है। यह सीएलआर कक्षाओं के बारे में है। –

+0

यदि आप वीटीबल को अधिक व्यावहारिक तरीके से देखना चाहते हैं, तो आप WinDbg पर '! डंपएमटी-एमडी पता' कमांड चलाने के लिए इस तरह की पोस्ट का पालन कर सकते हैं, https://blogs.msdn.microsoft.com/kristoffer/2007/ 01/02/सेटिंग-ए-ब्रेकपॉइंट-इन-प्रबंधित-कोड-उपयोग-विंडबग/ –

उत्तर

9

यह कार्यान्वयन विशिष्ट है, लेकिन this article सीएलआर v2 के लिए माइक्रोसॉफ्ट .NET कार्यान्वयन में मौजूद चीज़ों का विवरण देता है। मैं संदिग्ध यह सीएलआर v4 के लिए समान है, लेकिन मैं इसकी गारंटी नहीं दे सका। विवरण के लिए "ऑब्जेक्ट इंस्टेंस" नामक एक सेक्शन की तलाश करें - लेकिन आपको पूरा लेख दिलचस्प लगेगा। सिंक ब्लॉक जो लॉक करने के लिए प्रयोग किया जाता है, और प्रकार संदर्भ जो मूल रूप से (vtable सहित) जानकारी टाइप करने के लिए एक सूचक है:

लेख के अनुसार, वहाँ मूल रूप से शीर्ष लेख के दो टुकड़े कर रहे हैं।

+0

धन्यवाद! जिस लेख को आपने मुझे बताया वह मुझे लगता है कि मैं क्या देख रहा था। –

+0

यह लिंक टूटा हुआ है। :( –

+0

@MrAnderson: चूहों - सुनिश्चित नहीं है कि इसे कैसे ढूंढें, दुर्भाग्य से ... –

1

मूल "जिट एंड रन" आलेख still around, as a chm file है। बस का पालन MSDN instructions पढ़ने में सक्षम हो रहे हैं:

खिड़कियों के सबसे संस्करणों पर आप पहली बार अपने स्थानीय मशीन इन फ़ाइलों को बचाने चाहिए, और तब आदेश इसे पढ़ने के लिए में फ़ाइल अनवरोधित। फ़ाइल को अनब्लॉक करने के लिए, उस पर राइट क्लिक करें, और गुणों का चयन करें, और फिर 'अनब्लॉक' बटन का चयन करें। सामग्री तो

पढ़ हालांकि उपलब्ध हो जाएगा, सम्मानित जॉन स्कीट गलत अनुमान लगाया - और वस्तु स्मृति लेआउट वास्तव में बदल गया है। साशा गोल्डस्टीन लेआउट का एक अद्यतित (सीएलआर v4) सर्वेक्षण देता है, here

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