2010-03-05 60 views
6

我注意到vector的內存是動態分配的。所以對於一個本地向量,內存分配在哪裏?分配本地C++向量的內存在哪裏?

f(){ 

vector<int> vi; 
} 
+0

你是什麼意思的「在哪裏」?你在說堆還是堆? – Toji 2010-03-05 16:24:33

+0

是的,我的意思是堆棧與堆 – skydoor 2010-03-05 16:30:59

回答

19

向量在堆棧上分配(我的系統上有28個字節)。矢量內容分配在堆上。

3

要擴大Yacoby的回答,RAII意味着當vi超出範圍,任何與new分配(向量內)是delete d(在向量的析構函數)。這就是你如何混合堆棧和堆分配。

5

您可以使用Allocator模板類型和傳遞給構造函數的分配器對象的組合來更改爲STL容器分配內存的方式。

我問了一個關於如何製作矢量堆棧存儲的問題,並得到了this answer.您可能會感興趣。

+0

+1非常有趣... – Skilldrick 2010-03-05 16:57:48

+0

確定從我+1。 – Yacoby 2010-03-05 19:38:08

3

vector分配給它使用的allocator決定分配的位置。

在默認情況下std::allocator,它使用::operator new()