मैं काफी बड़ी संख्या में वस्तुओं को स्टोर करने के लिए std::deque
का उपयोग कर रहा हूं। अगर मैं उन वस्तुओं का एक समूह हटा देता हूं, तो मुझे लगता है कि इसकी स्मृति उपयोग घटती नहीं है, इसी तरह std :: vector के लिए।std :: deque से स्मृति को कैसे रिलीज़ करें?
क्या इसे कम करने का कोई तरीका है? मुझे पता है कि एक वेक्टर में आपको 'स्वैप चाल' का उपयोग करना होगा, जो मुझे लगता है कि यहां भी काम करेगा, लेकिन मैं इसके बजाय इससे बचूंगा क्योंकि इसे कंटेनर में छोड़े गए सभी तत्वों की प्रतिलिपि बनाने की आवश्यकता होगी (और इस प्रकार आपके पास यह आवश्यक है कि आपके पास प्रत्येक वस्तु को दो बार स्टोर करने के लिए पर्याप्त स्मृति)। मैं डेक के कार्यान्वयन से घनिष्ठ परिचित नहीं हूं, लेकिन इसकी मेरी समझ यह है कि ऐसी कई चीजों के बिना ऐसी चीज हासिल करना संभव हो सकता है (जबकि एक वेक्टर के साथ यह स्पष्ट रूप से नहीं है)।
मैं वीसी ++ (डंकमवेयर) एसटीएल का उपयोग कर रहा हूं, अगर इससे कोई फर्क पड़ता है।
क्या आपने यह स्थापित किया है कि जैसे ही पर्याप्त आइटम उन्हें खाली करने के लिए हटा दिए जाते हैं, आपका डेक कार्यान्वयन पहले से ही स्मृति के ब्लॉक को मुक्त नहीं कर रहा है? या यह है कि आप वास्तव में प्रत्येक छोर पर ब्लॉक को फिर से आवंटित करके पिछले कुछ बाइट्स को निचोड़ना चाहते हैं? –
मुझे ऐसा लगता है कि, काफी मोटे और तैयार तरीके से: मैं 100,000 आइटम जोड़ता हूं -> मेमोरी उपयोग ~ 90 एमबी है। मैं एक और 100,000 जोड़ता हूं -> मेमोरी उपयोग ~ 170 एमबी है। मैं 100,000 आइटम हटा देता हूं -> स्मृति उपयोग अभी भी ~ 170 एमबी है। एक और 100,000 जोड़ें -> अभी भी 170. मुझे लगता है कि 100,000 आइटम पर्याप्त से अधिक हैं कि इसमें खाली ब्लॉक होंगे जो इसे जाने पर मुक्त हो जाएंगे। – Peter
प्रक्रिया का मेमोरी उपयोग, या संग्रह के स्मृति उपयोग? सिर्फ इसलिए कि संग्रह स्मृति को मुक्त करता है इसका मतलब यह नहीं है कि यह ओएस पर वापस जाता है, इसलिए वस्तुओं को हटाने के बाद 80 एमबी चार सरणी आवंटित करने का प्रयास करें, और देखें कि क्या उपयोग 250 एमबी तक है या 170 पर रहता है। क्षमा करें यदि आप पहले से ही यह सब जानते हैं सामान और इसके लिए जिम्मेदार है - लाखों नहीं होगा। –