अपने आप में एक शून्य सूचक 4 या 8 बाइट्स लेगा, इस पर निर्भर करता है कि यह 32-बिट या 64-बिट के रूप में चल रहा है, जैसा कि आपने अनुमान लगाया है।
किसी दिए गए संग्रह में इससे अधिक नहीं हो सकता है। Dictionary<TKey, TValue>
के कार्यान्वयन दोनों Entry<TKey, TValue>
संरचनाओं, जो दो int
रों रूप में अच्छी तरह कुंजी और मान, और भी रूप में है कि सरणी में अनुक्रमण में इस्तेमाल पूर्णांकों की एक सरणी में शामिल है की एक सरणी का उपयोग करता है। इसलिए भले ही कोई "से बढ़ कमरा" था (और वहाँ आम तौर पर है) प्रत्येक प्रविष्टि 20bytes या स्मृति के 24bytes की आवश्यकता होगी (बजाय सिर्फ 8 या 12 कुंजी और मान के आकार से अपरिहार्य) के लिए भूमि के ऊपर के शीर्ष पर, शब्दकोश स्वयं (प्रत्येक सरणी के ऊपरी भाग सहित)।
अन्य कार्यान्वयन और अन्य संग्रह अन्य ओवरहेड्स होगा। वे एक शून्य प्रविष्टि के लिए null
स्टोर भी नहीं कर सकते हैं। null
यह इंगित करने का एक उपयोगी तरीका हो सकता है कि एक मान लिखा नहीं गया है, जिस स्थिति में एक विशेष मूल्य null
(विशेष रूप से लॉक-फ्री डिक्शनरी कार्यान्वयन में उपयोगी होता है), जहां यह केवल एक अनसेट के बीच अंतर करने के लिए उपयोगी हो सकता है और सेट मान, लेकिन एक सेट, सेट, और आंशिक रूप से सेट मान के बीच)।
आप वास्तव में कह सकते हैं कि null
ए का मूल्य जोड़ना सेटिंग ए) कुछ मेमोरी लेता है और बी) स्मृति को नहीं लेता है कि ऑब्जेक्ट द्वारा गैर-शून्य मूल्य के साथ लिया जाएगा। यहां तक कि बी) वास्तव में नहीं पकड़ता है, क्योंकि यदि उस ऑब्जेक्ट को कहीं और भी संग्रहीत किया गया था, तो संदर्भ के बाहर कहीं और संदर्भ में कोई अतिरिक्त मेमोरी लागत नहीं है, जो इसकी वास्तविक लागत को null
संग्रहीत करने के समान बनाता है।
स्रोत
2010-09-27 09:02:22
मैं आपके उत्तर से सहमत हूं, लेकिन मेरे पास इसके बारे में एक सवाल है। पॉइंटर्स int32 या int64 चर हैं, इसलिए, यदि आप उन्हें शून्य सेट करते हैं, तो हमारे पास स्मृति में कोई अन्य ऑब्जेक्ट नहीं है लेकिन अभी भी int32 ऑब्जेक्ट्स पॉइंटर चर के रूप में हैं? –
@ डॉ टीजे: पॉइंटर्स वास्तव में int32 या int64 ऑब्जेक्ट्स नहीं हैं, लेकिन उनके पास एक ही आकार है। सी एफ डबल में int64 के समान आकार होता है, लेकिन यह एक अलग प्रकार है। शून्य सूचक को 32 या 64 शून्य बिट्स द्वारा दर्शाया जाता है, और उन बिट्स को स्पष्ट रूप से कहीं भी संग्रहीत किया जाना चाहिए। – MSalters
ठीक है, स्पष्टीकरण के लिए धन्यवाद ... –