文件映射

文件映射 是文件内容与进程的一部分虚拟地址空间的关联。 系统创建 文件映射对象 (也称为 节对象) 来维护此关联。 文件视图是进程用来访问文件内容的虚拟地址空间部分。 文件映射允许进程使用随机输入和输出 (I/O) 和顺序 I/O。 它还允许进程高效处理大型数据文件(如数据库),而无需将整个文件映射到内存中。 多个进程还可以使用内存映射文件来共享数据。

处理使用指针从文件视图读取和写入文件视图的过程,就像使用动态分配的内存一样。 使用文件映射可提高效率,因为文件驻留在磁盘上,但文件视图驻留在内存中。 进程还可以使用 VirtualProtect 函数操作文件视图。

下图显示了磁盘上的文件、文件映射对象和文件视图之间的关系。

磁盘上的文件、文件映射对象和文件视图之间的关系。

磁盘上的文件可以是要映射到内存中的任何文件,也可以是系统页文件。 文件映射对象可以包含文件的全部或部分。 它由磁盘上的 文件提供支持。 这意味着,当系统交换文件映射对象的页时,对文件映射对象所做的任何更改都将写入文件。 当文件映射对象的页面交换回时,它们将从 文件还原。

文件视图可以包含文件映射对象的全部或部分内容。 一个进程通过文件视图操作文件。 进程可以为文件映射对象创建多个视图。 每个进程创建的文件视图驻留在该进程的虚拟地址空间中。 当进程需要来自当前文件视图中的某个文件部分的数据时,它可以取消映射当前文件视图,然后创建新的文件视图。

当多个进程使用相同的文件映射对象为本地文件创建视图时,数据是一致的。 也就是说,视图包含磁盘上文件的相同副本。 如果要在多个进程之间共享内存,则文件不能驻留在远程计算机上。

有关详情,请参阅以下主题: