2016-12-22 12 views
1

私は私のメモリより大きいデータファイルで作業しようとしています。メモリマップファイルは、メモリより大きなファイルに対してどのように機能しますか?

これまでのところ、ファイルのすべてのバイトを仮想メモリのアドレスにマップしていました。データは実際に必要なとき(たとえば、特定のエントリにアクセスするとき)にのみ実メモリに読み込まれ、ページと呼ばれるチャンクで読み込まれます。

しかし、私は最終的にそのデータファイルのすべてを処理しようとしていますが、最終的に実際のメモリにすべてを読み込む必要があるのではないでしょうか? OSは、余分なデータのための空き領域を確保するために、解放されるメモリ内のデータのどの部分を自動的に決定しますか?

このプロジェクトでは、Linux上でPythonを使用していますが、違いがあればそれを試しています。 numpy.memmap

+0

利用可能な物理メモリより大きいか、または使用可能な仮想アドレス空間より大きいですか? –

答えて

1

です。

メモリマップファイルは、メモリとページファイル間でデータを移動するのではなく、指定した任意のファイルとメモリ間でデータを移動するという点を除いて、従来のpagingとほぼ同じ方法で動作します。

物理メモリ(つまり、実際のRAMチップがマザーボードにある)が足りなくなった場合は、問題ありません。オペレーティングシステムは、あなたが使用しようとしていないと思うファイルの部分をページアウトします。もしそれが間違っているとすれば、パフォーマンスは低下しますが、クラッシュすることはありません。

しかし、仮想メモリ、またはアドレススペースが足りなくなった場合、それは問題ありません。この場合、プログラムのメモリアドレスが不足し、メモリを割り当てることができなくなります。また、ファイルのメモリマップ領域を拡張することもできません。 32ビットプログラムの場合、制限は4 GBより若干小さくなります(正確な制限は、オペレーティングシステムおよびプログラミング環境によって異なり、これらのシステムのオーバーヘッドによって異なります)。 64ビットプログラムの場合、制限は通常は巨大ですが、厳密にどの程度の大きさがアーキテクチャとオペレーティングシステムに依存しますか。

関連する問題