【发布时间】:2020-01-13 14:51:22
【问题描述】:
我正在使用 std::bitset 并尝试创建两个大小为 100,000,000,000 的数组 std::bitset。 结果,程序仅填充了我的 RAM 的 298 MB,但必须填充〜 24 GB。我有 32 GB RAM,现在 26 GB 是免费的。当我为 x86 构建代码时,它可以编译并且可以启动,但对于 x64,它会显示以下内容:错误 C2148:数组的总大小不得超过 0x7fffffff 字节。 如何修复它并且不减小 bitset 数组的大小?
我尝试制作 2 个全局数组。 另外,我已经在 Microsoft Visual Studio -> 项目 -> name_project 属性 -> 配置属性 -> 链接器 -> 系统 -> 堆栈保留大小设置为 25,000,000(我认为必须有 KB,所以我认为我已设置为 ~ 25 GB)。
... // other libraries
#include <bitset>
std::bitset <100000000000>mas;
std::bitset <100000000000>a1;
int main() {.../* work with the arrays */...}
我想用巨大的 std::bitset 数组运行代码。
UPD:对于 x86 可以,但是对于 x64 呢?我的代码检查了整个数组,并在某一时刻停止了。
【问题讨论】:
-
关于 32 位构建。 32 位寻址仅允许 2 GiB RAM。考虑到您的数据大小,这不是首发。如果它正在运行,那么一些非常奇怪的事情正在发生。
-
你确定是这个尺寸吗?与
sizeof核对较小的分配。 -
mas和a1不在堆栈上,因此堆栈大小不是问题。我不知道如果您保留 25 GB 堆栈会发生什么,但这听起来是个糟糕的主意。 -
值
100000000000不适合 32 位无符号整数。所以 32 位构建可能会溢出,给你一个更小的1215752192。 -
好的,但是 x64 呢?
标签: c++ windows std-bitset