增加数组的大小会产生一些问题

时间:2011-07-22 20:46:51

标签: c++

我试着检查一下,最大的数组大小是多少,可以在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的可用内存。我怎么能够创建大小为4 * 10 ^ 8的本地整数数组。这需要大约1.49GB,而且我没有那么多的空闲RAM。

2 个答案:

答案 0 :(得分:2)

真正的问题是:你为什么要使用全局变量?更糟糕的是,它是一个静态的原始数组?

正如已经建议的那样,用于保存全局变量的内存正在溢出(并且它可能写在你的"Here\n"字符串上)。

如果你真的需要那么大的数组,请使用动态分配的内存:

int main() {
   int* bigArray = new int[500000000];
   // ... use bigArray here
   delete[] bigArray;
}

答案 1 :(得分:0)

C ++固有地不限制数组大小的最大限制。在这种情况下,因为它是一个全局变量,它也将在堆栈之外。我唯一能想到的就是机器的内存限制。你的机器有多少内存?运行程序前有多少内存空闲?