Ben*_*enj 18 c++ memory-management stl
如果std :: vector和朋友自我调整大小,这是否意味着如果我声明一个这样的向量:
std::vector<string> myvec;
Run Code Online (Sandbox Code Playgroud)
然后它将使用更多堆栈调整大小,而:
std::vector<string> *myvec = new std::vector<string>();
Run Code Online (Sandbox Code Playgroud)
会使用更多堆调整大小吗?
Ark*_*nez 25
向量在其内部分配在堆上.
对于基于堆栈的bector,在堆栈中唯一支付的是几个字节,内部缓冲区将始终从堆中分配.
因此,当您执行vec = new vector()时,您正在分配一小部分,这可能不是很好.
在第一种情况下,您将在堆栈上创建向量.这并不意味着所有向量内部对象也在堆栈上.实际上,vector仍然会分配仅在堆上保存对象所需的内存.这是因为,要在堆栈上分配,您应该知道要创建多少个对象.但是这些信息不可用,因此唯一剩下的选择是从堆中为包含的对象分配内存.
| 归档时间: |
|
| 查看次数: |
9351 次 |
| 最近记录: |