C++ 基于栈的对象分配

标签 c++ memory memory-management

在 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.

发件人:http://www.cplusplus.com/reference/vector/vector/

关于C++ 基于栈的对象分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29132960/

相关文章:

c++ - 从内存中解码音频 - C++

mongodb - mongo 不遵守 Docker 内存限制

c++ - 如何创建一个队列,其中包含 boost::packaged_task<> 以及返回任意类型的函数?

R:函数如何使用省略号 (...) 接受变量参数而不将它们复制到内存中?

java - 如何将n个数字相加,相乘到数组中的给定范围,并以O(n)时间反转数组中的范围?

c - Malloc'ing 数组然后释放它们?

c# - ASP.NET 中的静态对象会浪费内存吗?

iOS临时保存信息的地方

c++ - 内联函数(何时插入)?

c++ - 在 C++11 lambda 语法中,堆分配的闭包?