C++向量内存分配

你不能有:

int array[1000000];

但是您可以制作vector并存储这 1000000 个元素。

这是因为数组存储在堆栈中并且没有足够的空间来增长吗?

当你使用向量代替时会发生什么?

它如何防止存储过多元素的问题?

回答

由于将那些定义为全局或其他地方可能不会进入堆栈,我假设我们正在定义int array[1000000]std::vector<int> array(1000000)在函数定义中,即局部变量。

对于前者,是的,你是对的。它存储在堆栈中,由于堆栈空间限制,在大多数环境中它是危险的。

另一方面,在大多数标准库实现中,后者只包含实际存储数据的大小、容量和指针。因此,无论向量中有多少元素,它都只会占用堆栈中的几十个字节。并且指针是从堆内存分配(newmalloc)生成的,而不是堆栈。

以下是每个在堆栈中占用多少字节的示例。

这是一个粗略的可视化。


以上是C++向量内存分配的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>