首页 > 解决方案 > 我将我的编译器从 32 转换为 64 位,但我仍然不能使用超过 2GB :( 为什么?

问题描述

我可以创建这个数组:

int Array[490000000];


cout << "Array Byte= " << sizeof(Array) << endl;

数组字节 = 1,960,000,000 字节并将 gb = 1,96 GB 转换为大约 2 GB。

但我不能同时创建这些:

int Array[490000000];
int Array2[490000000];

它给出错误为什么?对不起英语不好:)

我也像这样检查了我的编译器:

printf("%d\n", sizeof(char *));

它给了我 8 个。

标签: c++64-bit

解决方案


C++ 程序通常不会编译为具有 2Gb+ 的堆栈空间,无论它是在 32 位模式还是 64 位模式下编译。作为编译器选项的一部分,可以增加堆栈空间,但即使在允许将堆栈大小设置得那么高的情况下,它仍然不是理想的解决方案或推荐的解决方案。

如果您需要一个 2Gb 的数组,您应该使用std::vector<int> Array(490'000'000);(强烈推荐)或手动创建的数组,即int* Array = new int[490'000'000];(记住手动分配的内存必须使用 手动解除分配delete[]),其中任何一个都会分配动态内存。您仍然希望在 64 位模式下进行编译,因为如果您不这样做,这将违反应用程序的最大内存限制,但在您的场景中,这不是绝对必要的,因为 2Gb 小于最大值32 位应用程序的内存。


推荐阅读