2010-07-30 13 views
9
public class MyClass 
{ 
    int i = 0; 
    string str = "here"; 
    MyStruct mystruct; 
    B b; 
    ArrayList myList = new ArrayList(10); 

    public MyClass() 
    { 
    } 
    .... 
} 

public struct MyStruct 
{ 
    public int i; 
    public float f; 
} 

public class B 
{ 
    ... 
} 

सीखना चाहते हैं कि पृष्ठभूमि में कक्षा का एक उदाहरण कैसे बनाया जाता है। जब यह कथनसी # कक्षा का उदाहरण कैसे बनाता है?

MyClass myClass = new MyClass(); 

का मूल्यांकन किया जाता है। बैकग्राउड में क्या होगा? मेरे निम्नलिखित कथन सही हैं या नहीं (32-बिट ओएस मशीन के लिए)?

  1. एक मेमोरी स्पेस बनाया जाएगा और myClass के रूप में संदर्भित किया जाएगा;
  2. उपरोक्त मेमोरी स्पेस के भीतर, 0 बाइट्स int i के मान के लिए उपयोग किया जाता है;
  3. उपरोक्त मेमोरी स्पेस के भीतर, 0 बाइट्स string str के संदर्भ में उपयोग किया जाता है; str का वास्तविक मान अन्य स्थान (जहां?)
  4. उपरोक्त मेमोरी स्पेस में संग्रहीत है, 8 बाइट्स MyStruct mystruct (क्योंकि MyStruct 8 बाइट्स) के मान के लिए उपयोग किया जाता है;
  5. उपरोक्त मेमोरी स्पेस के भीतर, 0 बाइट्स B b ऑब्जेक्ट के संदर्भ में उपयोग किया जाता है; बी ऑब्जेक्ट के लिए स्मृति आवंटित होने पर कहीं और आवंटित की जाएगी;
  6. उपरोक्त मेमोरी स्पेस के भीतर, 0 बाइट्स ArrayList myList के संदर्भ में 4 बाइट्स का उपयोग किया जाता है; ArrayList myList के लिए वास्तविक मेमोरी स्पेस को अन्य जगह पर आवंटित किया गया है और यहां myList के रूप में संदर्भित किया गया है;
  7. उपरोक्त मेमोरी स्पेस से अन्य 4 या 8 बाइट ऑब्जेक्ट मेटाडेटा के लिए उपयोग किया जाता है;
  8. ...;

उत्तर

2

आपके पास जगह में मूल विचार है। इसके वास्तविक विनिर्देश, जो आप शामिल करते हैं उसके अलावा, कार्यान्वयन विशिष्ट है। हालांकि, आपके कुछ बिंदुओं के लिए:

3) वास्तविक स्ट्रिंग आमतौर पर किसी भी अन्य वर्ग की तरह ही अपनी मेमोरी स्पेस में संग्रहीत होती है। हालांकि, चूंकि आप इस मामले में एक स्ट्रिंग अक्षर का उपयोग कर रहे हैं, यह संभवतः स्ट्रिंग इंटर्न पूल में होगा, जो कि (मुझे विश्वास है) बड़े ऑब्जेक्ट ढेर में संग्रहीत है। स्ट्रिंग इंटर्निंग के विवरण के लिए, String.Intern देखें। (आप मक्खी पर स्ट्रिंग आवंटित हैं, तो एक शाब्दिक उपयोग करने के बजाय, स्ट्रिंग अपने आवेदन के सामान्य प्रबंधित ढेर में संग्रहीत किया जाएगा।) से ऊपर स्मृति स्थान प्रयोग किया जाता है

1

यह इसके बारे में है।

स्ट्रिंग को ढेर में एक मुक्त फ़्लोटिंग ऑब्जेक्ट की बजाय स्ट्रिंग टेबल में संग्रहीत किया जाता है। यह ध्यान रखना महत्वपूर्ण है कि उस स्ट्रिंग का केवल एक उदाहरण तत्काल है, MyClass के उदाहरणों की संख्या के बावजूद तत्काल।

1

7.another 4 या 8 बाइट्स ऑब्जेक्ट मेटाडाटा

यह 8 बाइट होगा। 4 सिंकब्लॉक के लिए और 4 प्रकार की जानकारी के लिए।

आप इस question में इस विषय के बारे में अधिक जानकारी प्राप्त कर सकते हैं।

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