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

标签 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 的可用 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/

相关文章:

java - C++ 类中 'this' 指针可以为空吗?

c++ - gluPerspective 不工作

c++ - 声明中类型和对象的相同标识符

c++ - 在 C++ 中提升线程

c++ - 为什么new调用了3次,delete调用了3次?

c++ - 在 C++ 中,是否有通过字符串调用对象属性的方法?

c++ - 默认参数位置的 Lambda 无法访问友元成员。这是编译器错误吗?

c++ - 为什么不鼓励在 C++ 中使用指令?

模板中的 C++ 静态常量初始化顺序

c++ - 表达式 ((sizetype)(((ssizetype)length) + -1)) + 1