几乎应用程序都要使用文件,当这并不容易。 到底是先打开文件——读取文件——关闭文件,还是 先打开文件——缓存算法来读取写入文件的相应部分——关闭文件。 内存映射文件是一种两全的办法。
与虚拟内存相似,内存映射文件,允许开发人员预定一块内存空间地址,并调拨物理存储器。不同之处在于:内存映射文件的物理存储器来自于硬盘上已有的文件本身,而不是系统的页交换文件。 一旦文件映射到地址空间,就好像整个文件都已载入内存一样,可以直接对文件进行访问。
内存映射文件主要用于以下三个方面:
1、使用内存映射文件来载入.exe 和dll文件。节省大量页交换文件的空间和应用程序启动的时间。
2、开发人员可以用内存映射问价来访问磁盘上的数据文件,这可以避免直接对文件进行I/O操作和对文件进行缓存。
3、不同进程的数据共享通信的多种机制如RPC 、COM、 LOE、Windows 消息、剪切板、邮件槽、管道、套接字等的底层都是采用 内存映射文件来实现的。
内存映射文件的一致性:
这种数据共享机制是让两个或多个进程映射同一个文件映射对象的视图来完成。因此当一个进程在文件映射对象视图中改写数据时,其他进程会在它们的视图中立刻看到变化。这意味着进程间共享物理存储页面。 总之,数据文件的每个页面在内存中只有一份——但这些内存页面被映射到多个进程的地址空间中,见此而已。