2017-01-11 10 views
1

ここで私は10^9ビット割り当てています:グラム++のstd用に割り当てるメモリのうち::ビットセット

#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; 
} 

を行う際1.25億バイト(125メガバイト)が細かい割り当てられています。私がNを10の異なるパワーに変更すると、両方ともsizeofが同じであることが分かります。私は268439551のバイト制限がどこから来ているのか分からない。268.4 MBなので、約4 GBのRAMがあるからだ。 32ビットシステムであっても~200 MBは問題を引き起こすべきではなく、何とかバイト制限に達します。ここで問題の原因は何ですか?

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

+2

コンパイラは何らかの理由でメモリが不足しているため、おそらくコンパイラのバグです。私はそれを更新するだろう。 4.8.3は2歳以上です。 – molbdnilo

+0

'' -ftrack-macro-expansion = 0'''コンパイラオプションを使ってみてください。それが役に立ったら、おそらくhttps://gcc.gnu.org/bugzilla/show_bug.cgi?id=56746の影響を受けているでしょう。 – Grisha

+0

@molbdnilo gcc 5.3.0でもう一度試しました。コンパイルには約15秒かかるが、私はまだ同じエラーが発生する。 – qwr

答えて

関連する問題