最後の質問-ショートバージョン:エラーメッセージは「コミットされた」仮想アドレス空間に関するものです。2番目の画面のスナップショットで[Commit Charge]グラフを見ると、実際に限界に達しているか、それに非常に近いことがわかります。
「無料」、「使用可能」、または「使用中」のRAMの量は重要ではありません。特に、「使用可能な」RAMの不足は、「メモリ不足」または「メモリ不足」メッセージの原因ではありません。
コミット制限は、RAMの合計+ページファイルサイズに等しくなります。コミットされたメモリが割り当てられると、実際にまだ使用されていなくても、すぐに「コミットチャージ」に課金されます。つまり、RAMまたはPFスペースはすぐには使用されません。物理スペース(RAMでもページファイルでも)は、メモリが実際に参照されるときにのみ使用されます。それ以降は、プログラムが解放するか、プロセス全体が終了するまで、どこかに存在する必要があります。
例:ページファイルがないため、コミット制限が16 GB(RAMサイズ)であるとします。ここで、8つのプロセスがそれぞれ1 GBのVirtualAlloc(MEM_COMMIT)を試行すると仮定します。結果:コミット料が8 GB増加します。ただし、RAMに直接的な影響はありません!文房具店で紙を買ったように見えますが、実際には紙を手に入れていません。ただし、新しいシートが必要になるたびに、魔法のように表示されます。パッド全体(割り当てられた領域のサイズ)を使い切るまで。
これらのプロセスのそれぞれが、その1 GBのうち100 MBだけに実際にアクセスすると仮定します。使用されるRAMは800 MBのみです。
しかし、それらのそれぞれがその1 GBのすべてを参照する可能性があるため、OSは、8 GBのRAM +ページファイル領域を確保する必要があります... 。文房具店に戻って、彼らは以前に購入したのと同じ数のシートを全員に与えるために十分な紙を在庫に保管する必要があります。
したがって、現在のコミット量が制限に達すると、OSはVirtualAlloc(MEM_COMMIT)の成功を許可することを停止する必要があります。
どうして?プロセスはVirtualAllocの結果をチェックして、成功したかどうかを確認する必要があるためです。そうすると、allocが成功したことが判明すると、プロセスには、コミットされた領域全体への後続の参照が成功することを期待するすべての権利があります。
Windowsがそのスペースを実現するために使用可能なスペースの量を超えるコミットチャージを許可した場合、その期待は常に満たされるとは限りません。
簡単な回避策は、ページファイルのデフォルト(=初期)サイズを増やすことです。上記の説明から、ファイルに何も書き込まれない場合でも、エラーメッセージが表示されない理由を確認できます。繰り返しますが、OSは、必要な場合に備えて、すべてのコミットチャージ用のスペースを確保します。プロセスがコミットされたメモリを割り当てるとき、彼らは「ちょっと、OS、私はこれが必要かもしれない」と言っているだけです。それは、彼らが実際にそれを使うという意味ではなく、確かに彼らがまだ実際に使ったことを意味するものでもありません。
詳細については、こちらの回答をご覧ください。
さて... プロセスがそれを追加していないように見えるのに、なぜそんなに多くのコミットを使用しているのかは別の質問です。これを確認するには、タスクマネージャーの[パフォーマンス]タブの[メモリ]セクションを表示してください。