1

这里我分配 10^9 位:

#include <bitset>
#include <iostream>

const int N = 1000000000;
std::bitset<N> b;

int main()
{
    std::cout << sizeof(b) << std::endl;
}

我明白了cc1plus.exe: out of memory allocating 268439551 bytes

但是当我这样做时

#include <bitset>
#include <iostream>

const int N = 1000000000;
int l[N/32];

int main()
{
    std::cout << sizeof(l) << std::endl;
}

125000000 字节(125 MB)分配得很好。如果我更改N为 10 的不同幂,我会发现两者sizeof都是相同的。我什至看不到 268439551 字节的限制来自哪里,因为那是 268.4 MB,而我有大约 4 GB 的可用 RAM。即使在 32 位系统上,~200 MB 也不应该引起问题,并且以某种方式达到了字节限制。是什么导致了这里的问题?

在具有 8 GB RAM 的 Windows 8.1 上使用 gcc 4.8.3。

4

1 回答 1

1

这似乎是 GCC for c++11 的一个错误:Gcc 使用大量内存和处理器能力以及大型 C++11 位集。编译-std=c++98对我来说是一个临时的解决方法。

于 2017-01-12T22:11:11.263 回答