在 C++ 中,有两种方法可以声明一个对象。例如:
// The first way
vector<int> *nums = new vector<int>;
// The second way
vector<int> nums;
人们说第一个声明在堆中分配对象,第二个在堆栈中。如果 vector 对象在堆中,我可以想象它是如何工作的。编译器只会在堆中找到一个空闲 block 来存储 vector 。但是,如果当我不断将新元素推送到 vector 时,对象被分配在堆栈上会发生什么?会有足够的内存空间吗?如果没有,当 vector 的大小可以改变时,编译器如何在堆栈上找到足够大的内存块来存储 vector ?
最佳答案
将 vector
对象放入堆栈并不意味着它将其元素放入堆栈。检查文档:
Internally, vectors use a dynamically allocated array to store their elements. This array may need to be reallocated in order to grow in size when new elements are inserted, which implies allocating a new array and moving all elements to it.
关于C++ 基于栈的对象分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29132960/