use*_*417 8 c++ memory memory-management
在C++中,有两种方法可以声明一个对象.例如:
// The first way
vector<int> *nums = new vector<int>;
// The second way
vector<int> nums;
Run Code Online (Sandbox Code Playgroud)
人们说第一个声明在堆中分配对象,在堆栈中分配第二个声明.我可以想象,如果矢量对象在堆中,它是如何工作的.编译器只会在堆中找到一个空闲块来存储向量.但是如果在堆栈中分配对象时会发生什么情况,因为我不断将新元素推送到向量?会有足够的内存空间吗?如果没有,当向量的大小发生变化时,编译器如何在堆栈上找到足够大的内存块来存储向量?
mya*_*aut 10
将vector对象放在堆栈上并不意味着它会将其元素放在堆栈上.检查文件:
在内部,向量使用动态分配的数组来存储它们的元素.可能需要重新分配此数组,以便在插入新元素时增大大小,这意味着分配新数组并将所有元素移动到该数组.
来自:http://www.cplusplus.com/reference/vector/vector/