C ++大量向量
我在使用C ++的大量向量时遇到了一些麻烦。 Basicaly我想要一个200万个元素的数组,每个元素都是一个vector<int>
(它用于构建一个邻接列表)。
所以,当我做vector<int> myList[10]
它很好,但是当我做vector<int> myList[2000000]
它不起作用,我不知道为什么。
我试图做unsigned long int var = 2000000; vector<int> myList[var];
unsigned long int var = 2000000; vector<int> myList[var];
但仍然是同样的错误。 (我不知道什么是错误,我的程序只是崩溃)
如果你有任何想法,
谢谢
堆和堆内存之间有很大的区别。 堆是可以动态分配千兆字节内存的很好的空间 - 堆栈在分配大小方面受到更多限制(并且是在编译时确定的)。
如果定义了一个局部变量,这意味着它存在于栈中(就像你的数组)。 有200万个元素,至少分配了2MB(或者假设每个矢量的堆栈使用量约为24B,更像是48MB),这对于堆栈来说相当多,并可能导致崩溃。 动态分配vector
数组(或者最好是只分配一个vector
vector
)确保从堆中分配大量内存,这可以防止这种崩溃。
您还可以使用编译器标志增加堆栈的大小,但这通常不适用于动态分配。
这是有帮助的
为my_List
动态分配内存。 要么
将int的( my_List
)向量声明为一个全局变量,并将其大小设为const。 他们的存储位置在设计上足够大,可以分配如此大的内存大小。
对于局部变量,堆栈段可能很小以分配2e6 * 24B。
链接地址: http://www.djcxy.com/p/79807.html