web-dev-qa-db-ja.com

Linuxのmmap()と同じように、WindowsプラットフォームにメモリマッピングAPIはありますか?

同様に、メモリマッピングを行うAPIはありますか

mmap()

linuxでは?

30
Fernandez

ファイルマッピング

ファイルマッピングは、ファイルの内容とプロセスの仮想アドレス空間の一部との関連付けです。システムはファイルマッピングオブジェクトを作成します(セクションオブジェクトとも呼ばれます) )この関連付けを維持します。 file viewは、プロセスがファイルの内容にアクセスするために使用する仮想アドレス空間の一部です。ファイルマッピングにより、プロセスはランダムな入出力(I/O)とシーケンシャルI/Oの両方を使用できます。また、ファイル全体をメモリにマップしなくても、データベースなどの大きなデータファイルを効率的に処理することができます。複数のプロセスがメモリマップファイルを使用してデータを共有することもできます。

プロセスは、動的に割り当てられたメモリの場合と同様に、ポインターを使用してファイルビューの読み取りと書き込みを行います。ファイルマッピングを使用すると、ファイルはディスク上に存在しますが、ファイルビューはメモリ内に存在するため、効率が向上します。プロセスは、VirtualProtect機能を使用してファイルビューを操作することもできます。

何に使用したいかによります。既存のファイルをメモリにマップする場合、それは memory-mapped files でサポートされています。これらは、プロセス間でメモリを共有するためにも使用できます(基礎となるファイルなしで名前付きマッピングオブジェクトを使用します)。物理メモリをマップする場合、いくつかのトリックはありますが、ユーザーモードでは一般的にサポートされていません。

13
Igor Skochinsky