我在C ++中遇到一大堆矢量问题。
基本上我不是一个包含2百万个元素的数组,每个元素都是vector<int>
(用于构建邻接列表)。
所以当我做vector<int> myList[10]
时它很有效,但是当我做vector<int> myList[2000000]
时它不起作用而且我不知道为什么。
我尝试unsigned long int var = 2000000; vector<int> myList[var];
,但仍然是同样的错误。 (我不知道错误是什么,我的程序崩溃了)
如果您有任何想法,
谢谢
答案 0 :(得分:3)
heap and stack memory之间存在很大差异。堆是一个很好的大空间,你可以动态分配千兆字节的内存 - 堆栈在分配大小方面更受限制(并且在编译时确定)。
如果定义局部变量,则意味着它存在于堆栈中(就像您的数组一样)。有200万个元素,分配至少2MB(或假设每个向量的堆栈使用量大约为24B,更像是48MB),这对于堆栈来说是相当多的,并且可能导致崩溃。动态分配vector
的数组(或者最好只分配vector
vector
s)确保从堆中分配大量内存,这可以防止此崩溃。
您还可以使用compiler flags增加堆栈的大小,但这通常不仅仅是动态分配。
答案 1 :(得分:-2)
为my_List
动态分配内存。或
将int的向量数组(my_List
)声明为全局变量,并将大小设置为`const。它们的存储位置设计得足够大,可以分配如此大的存储大小。
对于局部变量,堆栈段可能很小,以分配2e6 * 24B。