C++ C++;向量存储器分配

C++ C++;向量存储器分配,c++,C++,你不能有: int array[1000000]; 但是你可以制作一个向量并存储那1000000个元素 这是因为数组存储在堆栈上,没有足够的空间增长吗 当你用向量代替时会发生什么 它如何防止存储过多元素的问题?由于将这些元素定义为全局元素或其他位置的元素可能不在堆栈中,我假设我们在函数定义中定义int-array[1000000]或std::vector-array(1000000),即局部变量 对于前者,是的,你是对的。它存储在堆栈中,由于堆栈空间的限制,在大多数环境中是危险的 另一方面,在

你不能有:

int array[1000000];
但是你可以制作一个
向量
并存储那1000000个元素

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

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


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

由于将这些元素定义为全局元素或其他位置的元素可能不在堆栈中,我假设我们在函数定义中定义
int-array[1000000]
std::vector-array(1000000)
,即局部变量

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

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

是一个示例,说明它在堆栈中占用的字节数

这是一个粗略的想象


“不能有int数组[1000000]”为什么不呢?对于静态/全局变量,仅受可用内存的限制。对于本地/堆栈变量,您可能需要采取额外的预防措施以适应如此大的数组,但这并不意味着“您不能”。堆内存会用完吗?这里是geeksforgeks.org/memory-layout-of-c-program,堆会朝堆栈方向增长,为什么将数据存储在堆中会有帮助?这是因为堆可以增长,而堆栈不能增长吗?堆内存也可能耗尽,因为堆和堆栈是有限内存空间的逻辑区域。然而,通常堆栈内存为数兆字节,而堆内存为数兆字节或更多千兆字节。更重要的是,堆用于分配动态内存。例如,向量可以调整大小。假设您要将阵列大小调整为2000000。由于堆栈进行静态内存分配(每个函数在编译时都知道其堆栈大小),所以不能调整堆栈上对象的大小。但是如果它在堆上,您可以自由地释放数据,并以新的大小分配新的空间。你也可以阅读