一、内存映射
内存映射文件允许开发人员预定一块地址空间区域并给区域调拨物理存储器。内存映射文件的物理存储器来自磁盘已有的文件,而不是来自系统的页交换文件。一旦把文件映射到地址空间,就可以对它进行访问,就好像整个文件都已经被载入内存一样。不必再对文件执行I/O操作。
使用内存映射文件来颠倒文件内容时,先打开文件并向系统预订一块虚拟地址空间区域。接着让系统把文件的第一个字节映射到该区域的第一个字节,然后就可以访问这块虚拟内存区域,就好像它实际上包含了文件一样。优点:在于系统为我们处理所有与文件缓存有关的操作,不必再分配任何内存,把文件中的数据载入内存,把数据写回文件,以及释放内存。
内存映射文件有三种,第一种是可执行文件的映射,第二种是数据文件的映射,第三种是借助页面交换文件的内存映射.应用程序本身可以使用后两种内存映射.
过程
1.创建或打开一个文件内核对象。该对象标识了我们想要用作内存映射文件的那个磁盘文件。CreateFile().
2.创建一个文件映射内核对象来告诉系统文件的大小以及如何访问文件。CreateFileMapping()
3.告诉系统把文件映射对象的部分或者全部数据映射到进程的地址空间。MapViewOfFile();
4.从进程的地址空间撤销对文件数据的映射。UnmapViewOfFile();
5.关闭文件映射对象和文件对象。