File Mapping

文件映射(File Mapping)

文件映射(File mapping)是指:将一个文件的内容与一个进程(process)的虚拟地址空间的一部分相关联。一个文件视图(file view)是进程用来访问文件内容的虚拟地址的一部分。文件映射允许进程可以随机读写和顺序读写文件。它也使得进程在遇到大文件时有效的工作,比如数据库,而不需要映射整个文件到内存。多进程可以通过内存映射文件(memory-mapped files)共享数据。

进程使用指针从文件视图(file view)读数据以及写数据到文件视图,就像在动态分配内存时它们会做的那样。文件映射能够提高效率是因为文件位于磁盘上,而文件视图(file view)位于内存中。进程可以通过VirtualProtect函数来操作文件视图(file view)。

下图阐明了磁盘上的文件(file on disk)、文件映射对象(a file mapping object)、以及文件视图(file view)三者的关系。

磁盘上的文件(file on disk)可以是你想要映射到内存的任何文件,或者它可以是系统的页文件。文件映射对象(file mapping object)可以由文件的全部或者一部分组成。它由磁盘上的文件支持。这意味着当系统将文件映射对象(file mapping object)的页交换出来时,任何对文件映射对象的改变都会被写入磁盘上的文件中。当文件映射对象的页被交换回去,它们从文件中恢复。

一个文件视图(file view)可以由文件映射对象的全部或者一部分组成。一个进程文件视图来操作文件。一个进程可以为文件映射对象创建许多个视图。由每个进程创建的文件视图位于该进程的虚拟地址空间。当进程需要文件某部分的数据而非当前文件视图里的数据时,她会解除对当前文件的映射,然后创建一个新的文件视图。

当有多个进程使用同一个文件映射对象来为本地文件创建视图时,数据是一致的(coherent)。也就是说,视图包含了对磁盘文件的同一份拷贝。如果你想要在多进程中共享内存,文件就不能位于远程电脑上。

对于更多的信息,请看接下来的主题:

  • 创建内存映射对象
  • 创建文件视图
  • 共享文件和视图
  • 读写文件视图
  • 关闭文件映射对象
  • 文件映射安全性和访问权限
  • 使用文件映射
原文地址:https://www.cnblogs.com/zhenghao2/p/6514279.html