当前位置:首页 > 内存 > 正文

进程内存映射

  • 内存
  • 2024-08-11 22:32:15
  • 2503

一、如何将内存的一部分内容映射成一个文件内存映射文件有点类似于虚拟内存,只不过您可以保留一个地址空间并将物理存储移动到该位置。它在磁盘上,而不是系统页面文件,并且该文件必须先格式化才能运行,就像将整个文件从磁盘加载到内存中一样。由此可以理解,使用内存映射文件来处理存储在磁盘上的文件时,不需要对文件进行I/O操作,也就是说处理文件时不需要申请和分配缓存。内存映射文件可以更好地发挥作用,因为文件的所有文件缓存操作都由系统直接管理,省去了将文件数据加载到内存、返回笔记本的步骤。管理文件具有最重要的作用。另外,实际项目中的系统往往需要在多个进程之间共享数据,处理方式灵活,共享数据容量大,这时就有必要使用内存映射文件。事实上,内存映射文件是处理多个本地进程之间数据共享的最有效方法。
内存映射不是简单的文件I/O操作。所以,如果你想对内存映射文件有更深入的了解,这里就Windows操作系统的内存管理而言,介绍一下内存映射文件的一般使用方法:
首先使用CreateFile()函数创建或打开磁盘上的文件内核对象是一个标识用作内存映射文件的文件。使用CreateFile()通知操作系统文件镜像在物理存储中的位置后,只指定了镜像文件的路径,并没有指定镜像的长度。要指定文件映射对象需要多少物理存储空间,需要通过CreateFileMapping()函数创建一个文件映射内核对象,告诉系统文件的大小以及如何访问该文件。创建文件映射后,您必须为文件数据预留一个地址空间,并将文件数据映射到该位置作为物理存储。MapViewOfFile()函数负责通过系统管理将全部或部分文件映射对象映射到正在进行的地址空间。此时,内存映射文件的使用和处理通常与加载到内存中的文件数据的处理相同,当内存映射文件完成后,必须通过一系列操作对其进行清理和处理。释放已使用的资源。这部分相对容易。使用UnmapViewOfFile()从进程的地址空间取消文件数据的映射,并使用CloseHandle()关闭先前创建的文件映射和文件对象。
二、如何利用一块已经开辟的内存创建内存映射文件一旦了解了基础知识,阅读信息就会容易得多。
1.内存映射文件快速概述。
内存映射文件也是Windows中的一种内存管理技术。它提供了统一的内存管理功能,允许应用程序通过内存指针访问磁盘上的文件。此过程类似于访问文件。ondisk访问加载文件的内存。通过文件映射,能够在磁盘文件的全部或部分内容与进程虚拟地址空间的特定区域之间建立关联,可以直接访问映射的文件,而无需执行文件I/O。文件的操作或操作。内容已缓冲。这种内存文件映射功能非常适合管理大尺寸文件。
2.使用内存映射文件的一般流程。
在一些特殊行业,我们经常要处理容量十几GB甚至几十GB的巨型文件,虚拟地址空间属于32位位进程。只有232=4GB。显然,文件图像无法立即匹配。在这种情况下,大文件的每个部分只能映射到较小的地址空间。这需要对上述整个过程进行适当修改:
1)将图像与文件的开头匹配。
2)访问图像。
3)放弃此图像
4)从文件中较深的偏移量开始匹配新图像。
5)重复步骤2,直到您可以访问文件中的所有数据。