g++ 内存不足为 std::bitset 分配

g++ out of memory allocating for std::bitset

本文关键字:bitset 分配 std 内存不足 g++      更新时间:2023-10-16

在这里我分配了 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 的可用内存。即使在 32 位系统上,~200 MB 也不应该引起问题,并且以某种方式达到了字节限制。是什么导致了这里的问题?

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

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