基于C ++堆栈的对象分配

时间:2015-03-18 21:23:19

标签: c++ memory memory-management

在C ++中,有两种方法可以声明一个对象。例如:

// The first way
vector<int> *nums = new vector<int>;

// The second way
vector<int> nums;

人们说第一个声明在堆中分配对象,在堆栈​​中分配第二个声明。我可以想象,如果矢量对象在堆中,它是如何工作的。编译器只会在堆中找到一个空闲块来存储向量。但是如果在堆栈中分配对象时会发生什么情况,因为我不断将新元素推送到向量?会有足够的内存空间吗?如果没有,当向量的大小发生变化时,编译器如何在堆栈上找到足够大的内存块来存储向量?

1 个答案:

答案 0 :(得分:10)

vector对象置于堆栈上并不意味着它将其元素放在堆栈上。检查文档:

  

在内部,矢量使用动态分配的数组来存储它们的元素。可能需要重新分配此数组,以便在插入新元素时增大大小,这意味着分配新数组并将所有元素移动到该数组。

来自:http://www.cplusplus.com/reference/vector/vector/