私は素数のデータベースを展開するプログラムを書いています。このプログラムはPythonで書かれており、8GB RAMのWindows 10(x64)で動作します。利用可能なメモリより多くのメモリを使用
list
が見つかったすべての素数は、計算のためにintegers
に保存され、実行中は約6-7GB
のRAMが使用されます。しかし、いくつかの実行中に、この数字は100MB
に下がった。実行中はメモリ使用量は低くなりますが、プライムアレイに追加される数値が増えるにつれ、予想通りに増加します。すべての実行でメモリが低下するわけではないことに注意してください。
メモリ使用量は、タスクマネージャで測定
これらは、次の理論に私をリードしてきました降下一見ランダム:私のコードにバグが、それは重要なデータをドロップすることとめちゃくちゃ、あります
- 結果(ほとんどの場合、結果によってはサポートされない可能性があります)
- Pythonはちょっとしばらくしてコードを最適化しています。
- PythonまたはWindowsは、それほど使用されていないプライム番号配列の部分を削除することで、RAMの過剰使用を補います。 (最終的に計算が不正確になる)
- PythonまたはWindowsはRAMの代わりにディスク領域を割り当てることで、RAMの過剰使用を補います。このメモリドロップの理由(複数可)何ができるか
質問
- ?
- どのように使用可能なRAM以上を使用するプログラムは、Pythonで処理されますか?
- Windowsは、使用可能なRAMを超えて使用するプログラムをどのように処理しますか?
RAMに残っているデータは、最も使用されたデータ(リストの最初の部分を意味し、ほぼすべて反復されます)と最も新しく追加されたデータ(最後の部分リスト)?最も発行されていないデータ(中間)はスワップ領域に送られますか? –
@FelixZY:たぶん。仮想メモリを管理しているWindowsは、リストのどの部分がどの部分であるかについての知識がありません。それは単にメモリのページで、そのうちのいくつかは他のものより頻繁に使用されるようです。 OSはあまり使用されていないように見えるものを取り除きます。アプリケーションライターとしては、どちらがどちらであるかについて多くの制御や知識がありません。 –