C ++大型矢量数组

时间:2017-10-21 22:37:31

标签: c++ arrays vector

我在C ++中遇到一大堆矢量问题。 基本上我不是一个包含2百万个元素的数组,每个元素都是vector<int>(用于构建邻接列表)。

所以当我做vector<int> myList[10]时它很有效,但是当我做vector<int> myList[2000000]时它不起作用而且我不知道为什么。

我尝试unsigned long int var = 2000000; vector<int> myList[var];,但仍然是同样的错误。 (我不知道错误是什么,我的程序崩溃了)

如果您有任何想法,

谢谢

2 个答案:

答案 0 :(得分:3)

heap and stack memory之间存在很大差异。堆是一个很好的大空间,你可以动态分配千兆字节的内存 - 堆栈在分配大小方面更受限制(并且在编译时确定)。

如果定义局部变量,则意味着它存在于堆栈中(就像您的数组一样)。有200万个元素,分配至少2MB(或假设每个向量的堆栈使用量大约为24B,更像是48MB),这对于堆栈来说是相当多的,并且可能导致崩溃。动态分配vector的数组(或者最好只分配vector vector s)确保从堆中分配大量内存,这可以防止此崩溃。

您还可以使用compiler flags增加堆栈的大小,但这通常不仅仅是动态分配。

答案 1 :(得分:-2)

This is helpfull

my_List动态分配内存。或

将int的向量数组(my_List)声明为全局变量,并将大小设置为`const。它们的存储位置设计得足够大,可以分配如此大的存储大小。

对于局部变量,堆栈段可能很小,以分配2e6 * 24B。