ここでは、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
わかります。sizeof
268439551 バイトの制限がどこから来ているのかさえわかりません。これは 268.4 MB であり、約 4 GB の RAM が空いているからです。32 ビット システムでも ~200 MB で問題が発生することはありませんが、何らかの理由でバイト制限に達しています。ここで問題を引き起こしているのは何ですか?
8 GB RAM を搭載した Windows 8.1 で gcc 4.8.3 を使用します。