【发布时间】:2011-01-24 04:45:50
【问题描述】:
我注意到向量的内存是动态分配的。那么对于一个局部向量,内存分配在哪里呢?
f(){
vector<int> vi;
}
【问题讨论】:
-
“在哪里”是什么意思?你说的是堆还是栈?
我注意到向量的内存是动态分配的。那么对于一个局部向量,内存分配在哪里呢?
f(){
vector<int> vi;
}
【问题讨论】:
vector 分配在它使用的 allocator 决定从哪里分配的任何地方。
在std::allocator的默认情况下,它使用::operator new()。
【讨论】:
您可以结合分配器模板类型和传递给构造函数的分配器对象来更改为 STL 容器分配内存的方式。
我问了一个关于如何让向量使用堆栈存储的问题,得到了this answer.你可能会觉得很有趣。
【讨论】:
为了扩展 Yacoby 的答案,RAII 表示当vi 超出范围时,分配有new(在向量内)的任何内容都是deleted(在向量的析构函数中)。这就是混合堆栈和堆分配的方式。
【讨论】:
向量在堆栈上分配(在我的系统上为 28 个字节)。向量内容在堆上分配。
【讨论】: