关闭文件映射对象

当进程完成文件映射对象后,它应通过使用每个文件视图的 UnmapViewOfFile 函数来销毁其地址空间中的所有文件视图。

取消映射文件的映射视图会使视图在进程的地址空间中占用的范围失效,并使该范围可用于其他分配。 它删除属于进程工作集的每个未映射虚拟页面的工作集条目,并减小进程的工作集大小。 它还会递减相应物理页的共享计数。

未映射视图中修改的页面在共享计数达到零之前不会写入磁盘,或者换而言之,直到从共享页面的所有进程的工作集中取消映射或剪裁这些页面。 即便如此,修改后的页面也会“懒洋洋地”写入磁盘:也就是说,修改可以在内存中缓存,并在以后写入磁盘。 为了在电源故障或系统崩溃时最大程度地降低数据丢失的风险,应用程序应使用 FlushViewOfFile 函数显式刷新修改后的页面。

当每个进程使用完文件映射对象并取消映射所有视图时,它必须通过调用 CloseHandle 关闭文件映射对象的句柄和磁盘上的文件。 即使有文件视图仍处于打开状态,这些对 CloseHandle 的调用也会成功。 但是,将文件视图保留为映射会导致内存泄漏。