- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
内存映射文件测试报告(windows)
内存映射文件测试报告(windows)内存映射文件简介1.1内存映射文件概念内存映射文件提供了一组独立的函数,使应用程序能够通过内存指针像访问内存一样访问磁盘上的文件。通过内存映射文件函数可以将磁盘上的文件全部或者部分映射到进程的虚拟地址空间的某个位置。一旦完成映射,对磁盘文件的访问就可以像访问内存文件一样便捷。1.2内存映射文件优点文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类,常用的有Win32 API的CreateFile()、WriteFile()、ReadFile()和MFC提供的CFile类等。一般来说,以上这些函数可以满足大多数场合的要求,但是对于某些特殊应用领域所需要的动辄几十GB、几百GB、乃至几TB的海量存储,再以通常的文件处理方法进行处理显然是行不通的。因此提出内存映射文件,它的优点为:(1)系统使用内存映射文件,以便加载和执行.exe和DLL文件。这可以大大节省页文件空间和应用程序启动运行所需的时间。(2)可以使用内存映射文件来访问磁盘上的数据文件。可以不必对文件执行I/O操作,并且可以不必对文件内容进行缓存。(3)可以使用内存映射文件,使同一台计算机上运行的多个进程能够相互之间共享数据。注:使用内存映射文件数据传输是通过4k大小的数据页面实现的。1.3内存映射文件原理简述内存映射文件是将硬盘上文件的位置与进程逻辑地址空间中一块大小相同的区域之间的一一对应。这种对应关系纯属是逻辑上的概念,物理上是不存在的,原因是进程的逻辑地址空间本身就是不存在的。在内存映射的过程中,并没有实际的数据拷贝,文件没有被载入内存,只是逻辑上被放入了内存。内存映射文件是把数据文件的一部分映射到虚拟地址空间(映射到的区域是在0x800000000~0xBFFFFFFF内),但不提交 RAM,存取这段内存的指令同样会产生页面异常。操作系统捕获到这个异常后,分配一页RAM,并把它映射到当前进程发生异常的地址处,然后系统把文件中相应的数据独到这个页面中,继续执行刚才产生异常的指令。它使应用程序可以通过内存指针对磁盘上的文件进行访问,其过程就如同对加载了文件的内存的访问。通过文件映射这种使磁盘文件的全部或部分内容与进程虚拟地址空间的某个区域建立映射关联的能力,可以直接对被映射的文件进行访问,而不必执行文件I/O操作也无需对文件内容进行缓冲处理。内存文件映射的这种特性是非常适合于用来管理大尺寸文件的。 需要说明的是,在系统的正常的分页操作过程中,内存映射文件并非一成不变的,它将被定期更新。如果系统要使用的页面目前正被某个内存映射文件所占用,系统将释放此页面,如果页面数据尚未保存,系统将在释放页面之前自动完成页面数据到磁盘的写入。2内存映射文件函数(windows)2.1内存映射文件操作流程(1)调用 CreatFile 打开想要映射的文件,获得句柄hFile;(2)调用 CreatFileMapping 函数生成一个建立在CreatFile函数创建的文件对象基础上的内存映射对象,得到句柄hFileMap;(3)调用 MapViewOfFile 函数把整个文件的一个区域或者整个区域映射到内存中,得到指向映射到内存的第一个字节的指针 lpMemory;(4)用该指针来读写文件;(5)调用 UnmapViewOfFile 来解除文件映射,传入参数为 lpMemory;(6)调用 CloseHandle 来关闭内存映射文件,传入参数为 hFileMap;(7)调用 CloseHandle 来关闭文件,传入函数为 hFile。2.2函数说明2.2.1CreateFile功能说明:创建或打开一个文件内核对象,这个对象标识了磁盘上将要用作内存映射文件的文件。2.2.2 CreateFileMapping功能说明:创建一个有名的共享内存。HANDLE CreateFileMapping(HANDLEhFile,?// 映射文件的句柄,设为0xFFFFFFFF以创建一个进程间共享的对象LPSECURITY_ATTRIBUTES lpFileMappingAttributes,?? // 安全属性DWORDflProtect,???// 保护方式DWORD dwMaximumSizeHigh,??//对象的大小 DWORD dwMaximumSizeLow, LPCTSTR lpName???// 必须为映射文件命名);2.2.3 MappViewOfFile功能说明:在创建文件映射对象后使用可以调用MapViewOfFile函数映射到本进程的地址空间内。LPVOID ? MapViewOfFile(HANDLE ? hFileMappingObject, DWORD ? dwDesiredAccess, D
文档评论(0)