हाल ही में एक दृश्य स्टूडियो सी ++ संकलक का उपयोग कर Windows पर सी की ++ विशेष रूप से सोच रही थी, मैं ढेर कार्यान्वयन के बारे में सोच रहा हूँ:क्या हेप मेमोरी आवंटन (जैसे ढेर में मार्कर) से जुड़ी मेमोरी ओवरहेड है?
यह मानते हुए कि मैं रिलीज संकलक उपयोग कर रहा हूँ, और मैं स्मृति विखंडन/पैकिंग के साथ संबंध नहीं कर रहा हूँ मुद्दों, ढेर पर स्मृति आवंटित करने के साथ जुड़े एक स्मृति ओवरहेड है? यदि हां, तो लगभग आवंटन कितने बाइट्स हो सकता है? क्या यह 32-बिट से 64-बिट कोड में बड़ा होगा?
मुझे वास्तव में आधुनिक ढेर कार्यान्वयन के बारे में बहुत कुछ पता नहीं है, लेकिन मुझे आश्चर्य है कि प्रत्येक आवंटन के साथ ढेर में लिखे गए मार्कर हैं, या फिर किसी प्रकार की तालिका को बनाए रखा जाता है (फ़ाइल आवंटन तालिका की तरह)।
संबंधित बिंदु पर (क्योंकि मैं मुख्य रूप से 'मैप' जैसी मानक-लाइब्रेरी सुविधाओं के बारे में सोच रहा हूं), क्या माइक्रोसॉफ्ट मानक-लाइब्रेरी कार्यान्वयन कभी भी हेप को अनुकूलित करने के लिए अपने स्वयं के आवंटक (पेड़ नोड्स जैसी चीजों के लिए) का उपयोग करता है उपयोग?
आमतौर पर जब आप सरणी आवंटित करते हैं, तो कुछ बाइट भविष्य में हटाए गए आकार के लिए आवंटित आकार के साथ संग्रहीत होते हैं। बड़े आवंटन के लिए, ओवरहेड किसी के नजदीक नहीं है। यदि आप एक समय में 4 बाइट आवंटित करते हैं, तो यह स्मृति को बहुत अच्छी तरह से दोगुना कर सकता है। तकनीकी रूप से –