内存映射文件主要用于以下三种情况:
1)系统使用内存映射文件来载入并运行.exe和动态链接库DLL文件。这大量节省了页交换文件的空间以及应用程序 启动的时间。
2)开发人员可以用内存映射文件来访问磁盘上的数据文件,这可以避免直接对文件进行I/O操作和对文件内容进行缓存。
3)可以在同一台机器上的不同进程之间共享数据。是最高效的方法。
1. 映射到内存的可执行文件和DLL
当一个线程调用CreateProcess时,系统会执行以下步骤:
1)确定所指定可执行文件的位置;
2)创建一个新的进程内核对象;
3)为新进程创建一个私有地址空间;
4)预订一块足够大的地址空间来容纳,.exe文件;
5)对地址空间区域进行标注,表明该区域的后备物理存储器来自于磁盘上的.exe文件,而不是页交换文件。
当把.exe文件映射到进程的地址空间之后,会访问.exe文件中的一个段,这个段列出了一些DLL文件,系统 会调用LoadLibrary来加载每个DLL,加载时执行的操作与第4)和第5)类似。
A)预订一块足够大的地址空间来容纳DLL文件。
B)如果 无法在DLL文件指定的基地址处预订区域,则会尝试另一个地址为预订;
C)对地址空间进行标注,表明该区域的后备物理存储器来自磁盘上的DLL文件,而非页交换文件。
当所有的.exe文件和DLL 文件都映射到进程的地址空间后,系统会开始执行.exe文件的启动代码。