我试图检查,可以在 CPP 中创建的最大数组大小是多少。我声明了一个“int”数组并不断增加数组大小。在 10^9 之后程序开始崩溃,但是对于大小为 5*10^8 或更大的数组存在严重错误(即使程序没有崩溃)。使用的代码和问题如下:
#include<iostream>
int ar[500000000];
int main()
{
printf("Here\n");
}
如果数组的大小减少到 4*10^8 或更小,上面的代码运行成功。但是,对于大于 5*10^8 的数组大小,程序运行成功但不打印任何东西,也不会崩溃,或给出任何错误或警告。
另外,如果数组定义是局部的,那么就没有这样的错误,在同样的限制之后程序会崩溃。这是在使用数组的全局定义时,程序不会崩溃也不会打印任何东西。
任何人都可以解释这种行为的原因。我知道数组的大小会因机器而异。
我有 1.2 GB 的可用 RAM。我如何才能创建大小为 4*10^8 的本地整数数组。这需要大约 1.49GB,而我没有那么多空闲 RAM。
最佳答案
真正的问题是:为什么要使用全局变量?更糟糕的是,它是一个静态原始数组?
如前所述,用于保存全局变量的内存正在溢出(它可能覆盖了您的 "Here\n"
字符串)。
如果你真的需要那么大的数组,使用动态分配的内存:
int main() {
int* bigArray = new int[500000000];
// ... use bigArray here
delete[] bigArray;
}
关于c++ - 增加数组的大小会产生一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6795921/