c++ - 我将我的编译器从 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++ 程序通常不会编译为具有 2Gb+ 的堆栈空间,无论它是在 32 位模式还是 64 位模式下编译。作为编译器选项的一部分,可以增加堆栈空间,但即使在允许将堆栈大小设置得那么高的情况下,它仍然不是理想的解决方案或推荐的解决方案。
如果您需要一个 2Gb 的数组,您应该使用std::vector<int> Array(490'000'000);
(强烈推荐)或手动创建的数组,即int* Array = new int[490'000'000];
(记住手动分配的内存必须使用 手动解除分配delete[]
),其中任何一个都会分配动态内存。您仍然希望在 64 位模式下进行编译,因为如果您不这样做,这将违反应用程序的最大内存限制,但在您的场景中,这不是绝对必要的,因为 2Gb 小于最大值32 位应用程序的内存。
推荐阅读
- reactjs - 调用函数后如何获取useLazyQuery挂钩数据
- css - css:根据输入删除文本
- spring - 将 HttpServletRequest 自动装配到任意 Spring 组件中的记录在哪里?
- r - 如何在R中将多个ID链接在一起?
- excel - Excel VBA中的解析列表?
- c - 我如何将标志 -l 和 -a 实现到我自己的 ls 函数
- python - 深度排序使用大量 CPU
- c++ - 使用 C++ 拆分 html 响应
- python - 如何对每 n 行进行分组并求和,但在熊猫中保持原始结构
- python - 试图从本地文件中获取 HTML 代码到我的电子邮件发件人