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) が適切に割り当てられています。別の 10 の累乗に変更すると、両方が同じであることがNわかります。sizeof268439551 バイトの制限がどこから来ているのかさえわかりません。これは 268.4 MB であり、約 4 GB の RAM が空いているからです。32 ビット システムでも ~200 MB で問題が発生することはありませんが、何らかの理由でバイト制限に達しています。ここで問題を引き起こしているのは何ですか?

8 GB RAM を搭載した Windows 8.1 で gcc 4.8.3 を使用します。

4

1 に答える 1

1

これは、c++11 の GCC のバグのようです。Gcc は、大規模な C++11 ビットセットで大量のメモリとプロセッサ パワーを使用します。でコンパイルすること-std=c++98は、私にとって一時的な回避策でした。

于 2017-01-12T22:11:11.263 に答える