मैं वैक्टरों के संबंध में स्मृति प्रबंधन के साथ बहुत उलझन में हूं और कुछ बुनियादी अवधारणाओं को समझा सकता हूं।सी ++ मेमोरी प्रबंधन और वैक्टर
मेरे पास एक ऐसा प्रोग्राम है जो बड़े वैक्टर का उपयोग करता है। मैं नई ऑपरेटर के साथ वैक्टर बनाया है और उन्हें के साथ कार्यक्रम के अंत में जारी हटाना स्मृति वापस पाने के लिए।
मेरा प्रश्न है, अगर कार्यक्रम दुर्घटनाओं या जो भी कारण के लिए निरस्त किया जाता है, हटाना लाइनों याद किया जाएगा, वहाँ भी इस परिदृश्य में स्मृति ठीक करने के लिए एक तरीका है।
मैं भी कुछ अन्य बड़े वैक्टर कि मैं नई कीवर्ड के बिना आवंटित की है। मैंने पढ़ा है कि ये ढेर पर बनाए जाएंगे, लेकिन वैसे भी स्मृति प्रबंधन को 'हुड के नीचे' के साथ निपटाया जाना चाहिए। हालांकि मुझे यकीन नहीं है कि यह हर बार जब मैं अपना प्रोग्राम चलाता हूं तो मैं राम खो देता हूं।
तो मेरी दूसरा सवाल नई कीवर्ड के बिना बनाया वैक्टर वास्तव में अपने स्वयं के उपकरणों के लिए छोड़ा जा सकता है और यहां तक कि अगर कोड मध्य प्रवाह निरस्त किया गया है खुद को बाद स्पष्ट करने के लिए पर भरोसा किया, है।
और मैं एक तिहाई सवाल है कि बस मन में उभर गया है, अगर वाहक स्वचालित रूप से ढेर पर बनाई गई हैं क्यों तुम कभी नई उन लोगों के साथ कीवर्ड का प्रयोग करेंगे है लगता है? पढ़ने के लिए धन्यवाद, बेन
"हर बार जब मैं अपना प्रोग्राम चलाता हूं तो मैं राम खो देता हूं" क्या आपका मतलब है "जब तक मैं प्रोग्राम से बाहर नहीं निकलता तब तक मेरी उपलब्ध रैम छोटी हो जाती है" या "प्रोग्राम से बाहर निकलने के बाद भी मेरी उपलब्ध रैम छोटी हो जाती है, और यह भी छोटा हो जाता है अगली बार जब मैं दौड़ता हूं, एक दिन तक मुझे बिल्कुल कोई रैम नहीं छोड़ा जाएगा "? –
मै मैक्स का सवाल दूसरा कर रहा हूं। विंडोज़ मेरा मानना है कि वास्तव में समाप्त होने वाले कार्यक्रमों को अनलोड नहीं किया जाता है जब तक कि इसे आवश्यकता न हो। इस तरह वे पहली बार जल्दी शुरू हो जाते हैं। –
"और मुझे लगता है कि एक तीसरा सवाल जो सिर्फ दिमाग में उग आया है, अगर वेक्टर स्वचालित रूप से ढेर पर बनाए जाते हैं तो आप कभी भी उनके साथ नए कीवर्ड का उपयोग क्यों करेंगे?" आपको केवल ऐसा करने की आवश्यकता होगी यदि आपको मौजूदा क्षेत्र के बाहर वेक्टर को पास करने की आवश्यकता है। यह अभ्यास में अपेक्षाकृत दुर्लभ है। – rlbond