[英]C++ vector memory allocation
你不能有:
int array[1000000];
但是您可以制作一个vector
并存储这 1000000 个元素。
这是因为数组存储在堆栈上并且没有足够的空间来增长吗?
当您改用向量时会发生什么?
它如何防止存储过多元素的问题?
由于将它们定义为全局或其他地方可能不在堆栈中的 go ,我假设我们在 function 定义中定义int array[1000000]
或std::vector<int> array(1000000)
,即局部变量。
对于前者,是的,你是对的。 它存储在堆栈中,由于堆栈空间的限制,在大多数环境中它是危险的。
另一方面,在大多数标准库实现中,后者仅包含实际存储数据的大小、容量和指针。 因此,无论向量中有多少元素,它都只会占用堆栈中的几十个字节。 并且指针是从堆 memory 分配( new
或malloc
)而不是堆栈生成的。
这是每个在堆栈中占用多少字节的示例。
这是一个粗略的可视化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.