私は次の問題を抱えています:
Windowsマシン(32ビット、3.1Gbメモリ、VC ++ 2008とmingwコンパイル済みコードの両方)で実行されるプログラムは、bad_alloc
例外がスローされて失敗します(約1.2Gbを割り当てた後、900万倍のベクトルを割り当てようとすると例外がスローされます) 、つまり約75Mb)、まだ十分なRAMが利用可能です(少なくともタスクマネージャーによると)。
Linuxマシン(32ビット、4Gbメモリ、32ビット、2Gbメモリ)で実行される同じプログラムは、約1.6Gbのピークメモリ使用量で正常に実行されます。興味深いことに、4Gb linuxマシンでwineの下で実行されたmingwによって生成されたwin32コードも、Windowsの下で実行された場合とは異なる(後の)場所ではありますが、bad_allocで失敗します...
考えられる問題は何ですか?
- ヒープの断片化?(どうすればわかりますか?これはどのように解決できますか?)
- ヒープの破損?(エラーが報告されずにpageheap.exeが有効になっているコードを実行しました。境界チェックを使用してベクトルアクセスを実装しました。これもエラーはありません。コードには基本的にポインターがなく、
std::vector
sとstd::list
sのみが使用されます。Valgrindでプログラムを実行します( memcheck)はメモリを消費しすぎて途中で終了しますが、エラーは見つかりません) - メモリ不足??? (十分なメモリがあるはずです)
さらに、Linuxバージョンが動作しているときに(そしてメモリの少ないマシンでも)Windowsバージョンが失敗する理由は何でしょうか?(/ LARGEADDRESSAWAREリンカーフラグは、効果がある場合はVC + 2008で使用されることにも注意してください)
どんなアイデアでも大歓迎です、私はこれで私の知恵の終わりにいます... :-(