内存映射文件测试报告(windows)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内存映射文件测试报告(windows)
目录
1 内存映射文件简介 (3)
1.1内存映射文件概念 (3)
1.2内存映射文件优点 (3)
1.3内存映射文件原理简述 (3)
2内存映射文件函数(windows) (4)
2.1内存映射文件操作流程 (4)
2.2函数说明 (4)
2.2.1 CreateFile (4)
2.2.2 CreateFileMapping (4)
2.2.3 MappViewOfFile (5)
3测试用例及结果(windows) (5)
3.1用例1 (5)
3.1.1 测试目的及流程 (5)
3.1.2 测试结果 (6)
3.2用例2 (6)
3.2.1 测试目的及流程 (6)
3.2.2 测试结果 (7)
3.3用例3 (7)
3.3.1 测试目的及流程 (7)
3.3.2 测试结果 (7)
3.4用例4 (7)
3.4.1 测试目的及流程 (7)
3.4.2 测试结果 (8)
3.5用例5 (8)
3.5.1 测试目的及流程 (8)
3.5.2 测试结果 (8)
4其他说明 (8)
5附录(代码) (9)
5.1创建内存映射文件代码 (9)
5.2测试用例3代码 (10)
1内存映射文件简介
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.1 CreateFile
功能说明:
创建或打开一个文件内核对象,这个对象标识了磁盘上将要用作内存映射文件的文件。2.2.2 CreateFileMapping
功能说明:
创建一个有名的共享内存。
HANDLE CreateFileMapping(
HANDLE hFile, // 映射文件的句柄,设为0xFFFFFFFF以创建一个进程间共享的对象LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // 安全属性
DWORD flProtect, // 保护方式
DWORD dwMaximumSizeHigh, //对象的大小
DWORD dwMaximumSizeLow,