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

上一篇: C++ large array of vectors

下一篇: Objects on a stack vs Objects on a heap in C++