c++ - 堆栈/堆中的 vector 元素?长输入,C++

标签 c++ memory vector heap-memory stack-memory

我有一个问题 据我所知,如果我会收到很多元素,并将它们放入堆栈中,进程可能会崩溃,堆应该更安全更大,所以,当我分配 vector v 和 insert 元素,它们将存储在堆中,就像其他主题中回答的那样,对吧? 所以我的程序不会因长输入而崩溃,对吧?

还有,vector在堆中是什么意思,vector对象不就是一个指向包含元素的首地址的指针吗,除了一些其他的函数

最佳答案

std::vector 的对象是在堆栈(或静态内存)中创建的,如果您不打算使用 operator new 在堆中创建它们的话。但是 vector 包含的项目是在堆中创建的。例如,当您在某些函数中按以下方式定义 vector 时

std::vector<int> v( 100 );

然后变量v被放入栈中。然而,v 对象本身分配了一个足够大的堆范围以容纳 100 个 int 类型的元素。

您可以使用 operator sizeof that 来确定有多少内存占用了 std::vector 类型的对象本身。试试这段代码

std::vector<int> v( 100 );
std::cout << sizeof( v ) << std::endl;

正如您将看到的,类型为 std::vector 的对象的大小并不取决于该对象可以操作的项数。

关于c++ - 堆栈/堆中的 vector 元素?长输入,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19840027/

相关文章:

c++ - 错误 : could not convert 'p1' from 'Person (*)()' to 'Person'

c++ - 获取 C++17/C++20 中参数包的最后一个元素

linux - Linux RHEL 上的 RabbitMQ 内部内存路径映射到另一个位置

c++ - 如何知道何时释放内存?

c++ - 为什么我们不能像在 C++ 中输入数组那样输入 vector ?

c++ - 构造函数中对 (class)(type) 的调用不匹配

c++ - 错误 : expected ';' before '<' token

c++ - 正确删除EGL Opengles 2.0

c++ - 程序终止于大数组的初始化

c++ - 当一个std::vector对象在栈中,另一个在堆中时,vector的swap函数的时间复杂度是O(1)还是O(n)?