グーグルとスタックオーバーフローで答えが見つからなかったので、この質問を投稿しています...
問題は、仮想メモリのスワップ スペースが使い果たされるとどうなるかということです。すべての RAM と仮想メモリが使い果たされたときに、OS はこの状況をどのように処理しますか。
こっそりと HDD の空き容量を増やしたり、例外を通知したりしますか
グーグルとスタックオーバーフローで答えが見つからなかったので、この質問を投稿しています...
問題は、仮想メモリのスワップ スペースが使い果たされるとどうなるかということです。すべての RAM と仮想メモリが使い果たされたときに、OS はこの状況をどのように処理しますか。
こっそりと HDD の空き容量を増やしたり、例外を通知したりしますか
仮想メモリによって、スワップスペースを参照していると仮定します(これらは技術的に異なる概念です)。私は2つのことを考えることができます:
プログラムは、割り当てが正常に行われたことを確認し(つまり、Cではmallocの戻りコードがあります)、うまくいかなかった場合は、かつては遍在していた「メモリ不足」エラーメッセージで正常に終了します。JavaとC++には、同じ目的のための例外があります。
本当に、誰がもうメモリを使い果たしているので、プログラムはチェックしません。(これはここで考えているプログラマーです。)mallocの呼び出しが成功したかどうかをチェックしないプログラムがたくさん書かれている可能性があります。そのため、それらは不正なポインターを使用してメモリを引き起こそうとします。アクセス違反。Windowsでは「このプログラムで問題が発生しました」というメッセージが表示され、Unixでは簡潔な「Segfault」メッセージが表示されてプログラムが終了します。
Windows がそれをどのように処理するかはわかりませんが、*nix システムでは、カーネルが OOM Killer プログラムを実行します (詳細については、http://linux-mm.org/OOM_Killerを参照してください) 。