内存映像文件

象使用虚拟内存一样,使用内存映像文件同样需要经过保留和提交两个过程,首先在进
程内存空间保留一块区域,然后提交物理存储给这段区域。不同的是物理存储来自于磁
盘上的文件,而不是系统的分页文件。也即将磁盘上指定的数据文件作为虚拟内存,这
个实现过程被称为文件映像,可以将文件全部或部分映像到进程的地址空间中。文件映
像过以后,可以把文件映像的部分当作已全部被载入内存一样的去访问它,这时又称它
为内存映像文件。

内存映像文件使用步骤
要使用内存映像文件,可以按以下步骤:
(1) 调用Windows API 函数CreateFile()创建或是打开一个文件,得到一个标识该文
件(内核对象)的句柄,它确定了哪一个磁盘文件将要作为内存映像文件。
(2) 将(1)中得到的文件对象句柄作为第一个参数调用Windows API 函数CreateFileM
apping()创建一个文件映像对象。通知系统该文件的大小及对该文件的访问方式,同
时也得到一个标识该文件映像对象的句柄。
(3) 将(2)中得到的文件映像对象句柄作为第一个参数调用Windows API 函数MapView
OfFile()通知系统映像文件全部或部分内容到进程的某一段地址空间,并将此段空间
首地址通过该函数返回。这一步也就是使用虚拟内存的保留和提交过程,此后就可以利
用此首地址实现对文件内容的读写了。
也可以不做第一步,直接从第二步开始,但这时要用INVALID_HANDLE_VALUE为参数作为
标识文件对象的句柄,这时系统以其分页文件作为内存映像文件而不用指定磁盘上的哪
一个磁盘文件。当你使用完内存映像文件后,需要做以下几步清除动作。
(1) 调用Windows API 函数UnmapViewOfFile(),通知系统释放文件映像对象在进程地
址空间中占用的区域。
(2) 调用Windows API 函数CloseHandle(),分别关闭文件映像对象和文件对象。

原文地址:https://www.cnblogs.com/hnxxcxg/p/2940697.html