ここで私は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を使用する。
コンパイラは何らかの理由でメモリが不足しているため、おそらくコンパイラのバグです。私はそれを更新するだろう。 4.8.3は2歳以上です。 – molbdnilo
'' -ftrack-macro-expansion = 0'''コンパイラオプションを使ってみてください。それが役に立ったら、おそらくhttps://gcc.gnu.org/bugzilla/show_bug.cgi?id=56746の影響を受けているでしょう。 – Grisha
@molbdnilo gcc 5.3.0でもう一度試しました。コンパイルには約15秒かかるが、私はまだ同じエラーが発生する。 – qwr