में सी # अगर मैं निम्नलिखित कोड का उपयोग करता हूं
शब्दकोश & lt; int, object & gt; शब्दकोश = नया शब्दकोश & lt; int, object & gt; (); dictionary.Add (1, नल); शब्दकोश। जोड़ें (2, नया ऑब्जेक्ट ()); शब्दकोश [2] = नल;
कितनी मेमोरी आवंटित की जा रही है? शब्दकोश में प्रत्येक वस्तु का संदर्भ करता है (शब्दकोश [1], शब्दकोश [2]) ढेर पर एक सूचक आकार (32 या 64 बिट) लेता है? दूसरे शब्दों में जब मैं शब्दकोश करता हूँ। जोड़ें (1, रिक्त) सीएलआर स्वचालित रूप से ढेर पर 2 आवंटन, एक इंट के लिए और एक रिक्त सूचक के लिए एक बनाता है?
रिक्त सूचक ढेर पर कुछ भी संग्रहीत करने के लिए किसी भी अतिरिक्त स्मृति को आवंटित नहीं करता है (चूंकि स्टोर करने के लिए कुछ भी नहीं है)। हालांकि, आपके शब्दकोश को रिक्त सूचक को खुद ही स्टोर करना होगा, जो किसी भी अन्य सूचक के रूप में अधिक से अधिक स्थान लेता है।
चाहे प्रत्येक आवंटित कॉल परिणामों में नए आवंटन (सूचक को संचय करने के लिए) या नहीं, कार्यान्वयन। आमतौर पर, इसमें एक आंतरिक सरणी होती है जो जरूरी के रूप में पुनः आकार की जाती है।
आपके उदाहरण में, मुझे लगता होगा कि जब आप शब्दकोश बनाते हैं तो कुछ तत्वों के लिए पर्याप्त स्थान पहले से ही आवंटित किया जाता है इसलिए जोड़ें (1, रिक्त) किसी भी अधिक स्थान को आवंटित नहीं करेगा।
अपडेट: निर्दिष्ट नहीं है .NET 4.0 में, यह 0 पर शुरू होता है, वास्तव में, इसलिए पहले जोड़ भंडारण एरे को बनाएगा।
Comments
Post a Comment