2010-03-05 18 views
6

मैंने देखा कि वेक्टर के लिए स्मृति गतिशील रूप से आवंटित की जाती है। तो एक स्थानीय वेक्टर के लिए, स्मृति आवंटित कहाँ है?स्थानीय सी ++ वेक्टर आवंटित करने के लिए स्मृति कहां है?

f(){ 

vector<int> vi; 
} 
+0

"कहां" से आपका क्या मतलब है? क्या आप ढेर बनाम ढेर बात कर रहे हैं? – Toji

+0

हां, मेरा मतलब है स्टैक बनाम ढेर – skydoor

उत्तर

19

वेक्टर को स्टैक (मेरे सिस्टम पर 28 बाइट्स) पर आवंटित किया गया है। वेक्टर सामग्री ढेर पर आवंटित की जाती है।

3

Yacoby के जवाब पर विस्तार करने के लिए, RAII मतलब यह है कि जब vi क्षेत्र से बाहर चला जाता है, कुछ भी new साथ आवंटित (वेक्टर के अंदर) delete घ (वेक्टर नाशक में) है। इस तरह आप ढेर और ढेर आवंटन मिश्रण करते हैं।

5

आप बदल सकते हैं एसटीएल कंटेनरों के लिए आवंटन कैसे आवंटित टेम्पलेट प्रकार के संयोजन और कन्स्ट्रक्टर को आवंटित आवंटक वस्तु के संयोजन के साथ स्मृति आवंटित किया जाता है।

मैंने एक प्रश्न पूछा कि वेक्टर का उपयोग स्टैक स्टोरेज कैसे करें और this answer. आपको यह दिलचस्प लगेगा।

+0

+1 बहुत रोचक ... – Skilldrick

+0

मुझसे डिफ़ॉल्ट +1। – Yacoby

3

vector जहां भी allocator आवंटित करने का निर्णय लेता है, आवंटित किया जाता है।

std::allocator के डिफ़ॉल्ट मामले में, यह ::operator new() का उपयोग करता है।

संबंधित मुद्दे