Windows文件内存映射的理解和应用
首先我们想一个问题,为什么要用到文件内存?举个例子:如果你只是处理一个几KB 的txt文件,加载到内存里面。可能对系统的影响不大,那么试想,当你处理一个几个G的文件,难道你也要加载到内存么?所以内存映射对处理一些size比较庞大的文件,内存映射是一个不错的选择!
先来讲解下我做文件内存映射的步骤吧:
1.先用CreateFile()创建或者打开一个文件内核对象
2.当创建件后指明了文件的路径,但是这个时候文件的长度我们还没有指定,所以为了指定文件映射对象需要多大的物理存储空间还需要通过CreateFileMapping()函数来创建一个文件映射内核对象以告诉系统文件的尺寸以及访问文件的方式
3.在创建了文件映射对象后,还必须为文件数据保留一个地址空间区域,并把文件数据作为映射到该区域的物理存储器进行提交。由MapViewOfFile()函数负责通过系统的管理而将文件映射对象的全部或部分映射到进程地址空间
4.在完成了对内存映射文件的使用时,还要通过一系列的操作完成对其的清除和使用过资源的释放。这部分相对比较简单,可以通过UnmapViewOfFile()完成从进程的地址空间撤消文件数据的映像、通过CloseHandle()关闭前面创建的文件映射对象和文件对象。
下面是创建自己rdp文件映射核心代码: