मैंने देखा कि वेक्टर के लिए स्मृति गतिशील रूप से आवंटित की जाती है। तो एक स्थानीय वेक्टर के लिए, स्मृति आवंटित कहाँ है?स्थानीय सी ++ वेक्टर आवंटित करने के लिए स्मृति कहां है?
f(){
vector<int> vi;
}
मैंने देखा कि वेक्टर के लिए स्मृति गतिशील रूप से आवंटित की जाती है। तो एक स्थानीय वेक्टर के लिए, स्मृति आवंटित कहाँ है?स्थानीय सी ++ वेक्टर आवंटित करने के लिए स्मृति कहां है?
f(){
vector<int> vi;
}
वेक्टर को स्टैक (मेरे सिस्टम पर 28 बाइट्स) पर आवंटित किया गया है। वेक्टर सामग्री ढेर पर आवंटित की जाती है।
Yacoby के जवाब पर विस्तार करने के लिए, RAII मतलब यह है कि जब vi
क्षेत्र से बाहर चला जाता है, कुछ भी new
साथ आवंटित (वेक्टर के अंदर) delete
घ (वेक्टर नाशक में) है। इस तरह आप ढेर और ढेर आवंटन मिश्रण करते हैं।
आप बदल सकते हैं एसटीएल कंटेनरों के लिए आवंटन कैसे आवंटित टेम्पलेट प्रकार के संयोजन और कन्स्ट्रक्टर को आवंटित आवंटक वस्तु के संयोजन के साथ स्मृति आवंटित किया जाता है।
मैंने एक प्रश्न पूछा कि वेक्टर का उपयोग स्टैक स्टोरेज कैसे करें और this answer. आपको यह दिलचस्प लगेगा।
+1 बहुत रोचक ... – Skilldrick
मुझसे डिफ़ॉल्ट +1। – Yacoby
vector
जहां भी allocator
आवंटित करने का निर्णय लेता है, आवंटित किया जाता है।
std::allocator
के डिफ़ॉल्ट मामले में, यह ::operator new()
का उपयोग करता है।
"कहां" से आपका क्या मतलब है? क्या आप ढेर बनाम ढेर बात कर रहे हैं? – Toji
हां, मेरा मतलब है स्टैक बनाम ढेर – skydoor