这里我分配 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。