C++向量内存分配
你不能有:
int array[1000000];
但是您可以制作vector并存储这 1000000 个元素。
这是因为数组存储在堆栈中并且没有足够的空间来增长吗?
当你使用向量代替时会发生什么?
它如何防止存储过多元素的问题?
回答
由于将那些定义为全局或其他地方可能不会进入堆栈,我假设我们正在定义int array[1000000]或std::vector<int> array(1000000)在函数定义中,即局部变量。
对于前者,是的,你是对的。它存储在堆栈中,由于堆栈空间限制,在大多数环境中它是危险的。
另一方面,在大多数标准库实现中,后者只包含实际存储数据的大小、容量和指针。因此,无论向量中有多少元素,它都只会占用堆栈中的几十个字节。并且指针是从堆内存分配(new或malloc)生成的,而不是堆栈。
以下是每个在堆栈中占用多少字节的示例。
这是一个粗略的可视化。