繁体   English   中英

C++ 向量 memory 分配

[英]C++ vector memory allocation

你不能有:

int array[1000000];

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

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

当您改用向量时会发生什么?

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

由于将它们定义为全局或其他地方可能不在堆栈中的 go ,我假设我们在 function 定义中定义int array[1000000]std::vector<int> array(1000000) ,即局部变量。

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

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

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

这是一个粗略的可视化。

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM