我很难让我的计算机分配大量内存(在我的机器上的32GB内)。我在Visual Studio 2015中,在64位计算机上将目标作为x64运行,因此应该没有内存限制。
最初我试图制作scanf("%lu", &memebr.number);
do {
c = getchar();
}while(c != '\n' && c != EOF);
puts("Please enter the street address");
gets(memebr.address);
,导致堆栈溢出。
根据Visual Studio调试器,内存使用量不会超过70MB,所以我很好奇内存问题是如何发生的。计算机上的内存使用量超过25GB。
有没有办法声明一个数组向量,如vector<int> my_vector[4][180][360]
没有内存问题?到目前为止,我只能达到vector<int> my_vector[4][180][360]
。我的大部分向量都只有很少的元素。非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
您是否在堆栈上分配内存?如果是这样,我相信在出现堆栈溢出错误之前有一个限制。对于Visual Studio 2015,我认为默认堆栈大小为1MB。
对于较大的阵列,您需要使用 new 关键字在堆上分配它们。
答案 1 :(得分:0)
如果您尝试分配多维数组,则会变得相当复杂。二维整数数组作为指针的数组动态分配,每个指针分配给新的整数数组。在一个天真的版本中,你需要一个循环来分配(并最终解除分配):
int **a= new int*[1000];
for (i = 0; i< 1000; i++) {
a[i] = new int[1000];
}
正如您所看到的,多个维度变得更加复杂,并且会占用额外的内存来存储指针。但是,如果您知道元素的总数,则可以只分配一个数组来存储所有元素(对于我的1000x1000示例为100000)并相应地计算每个元素的位置。
我会让剩下的让你弄明白......
答案 2 :(得分:0)
static std::vector<int> my_vector[4][180][360]; for (int i=0; i < 4; i++) for (int j=0; j < 180; j++) for (int k=0; k < 36; k++) my_vector[i][j][k].resize(90000); my_vector[1][2][3][4]=99;
通过创建虚拟到磁盘,这可以在我的机器上运行24gb。但它的可能性比较慢。您可能最好不要索引磁盘文件。
您还可以使用std :: map创建稀疏数组 &GT;
static std::map<int,int> my_map[4][180][360]; my_map[1][2][3][4]=99;