特に 64 ビットで malloc() が失敗する理由は何ですか?
私の特定の問題は、64ビットシステムで10GBの巨大なRAMチャンクをmallocしようとすることです。マシンには 12 GB の RAM と 32 GB のスワップがあります。はい、malloc は極端ですが、なぜそれが問題になるのでしょうか? これは、Intel コンパイラと MSFT コンパイラの両方を使用する Windows XP64 にあります。malloc は成功する場合もあれば、失敗する場合もあり、約 50% です。8GB の malloc は常に機能し、20GB の malloc は常に失敗します。malloc が失敗した場合、プロセスを終了して新しいプロセスを再度開始しない限り、繰り返されるリクエストは機能しません (その後、50% の成功が得られます)。他の大きなアプリは実行されていません。新たに再起動した直後でも発生します。
リクエストに割り当てるのに十分な大きさのアドレス範囲がないように、利用可能な 32 (または 31) ビットのアドレス空間を使い果たした場合、malloc が 32 ビットで失敗することを想像できます。
物理 RAMとハード ドライブのスワップ スペースを使い果たした場合、malloc が失敗することも想像できます。これは私には当てはまりません。
しかし、他の理由で malloc が失敗する可能性があるのはなぜでしょうか? 他の理由は思いつきません。
私は、特定の例よりも一般的な malloc の質問に興味があります。いずれにせよ、メモリ マップされたファイルに置き換える可能性があります。失敗した malloc() は、何よりもパズルのようなものです...ツールを理解し、基本に驚かないことを望んでいます。