我注意到vector的内存是动态分配的。那么对于本地向量,内存在哪里分配?
f(){
vector<int> vi;
}
答案 0 :(得分:19)
向量分配在堆栈上(我的系统上有28个字节)。向量内容在堆上分配。
答案 1 :(得分:5)
您可以使用Allocator模板类型和传递给构造函数的allocator对象的组合来更改为STL容器分配内存的方式。
我问了一个关于如何使向量使用堆栈存储的问题并得到this answer.你可能会发现它很有趣。
答案 2 :(得分:3)
要扩展Yacoby的答案,RAII表示当vi
超出范围时,使用new
(在向量内)分配的任何内容都是delete
d(在矢量的析构函数)。这就是你如何混合堆栈和堆分配。
答案 3 :(得分:3)
vector
会在其使用的allocator
决定分配的地方分配。
在std::allocator
的默认情况下,它使用::operator new()
。