在物理内存不足的情况下使用内存映射文件进行大内存操作

来源:互联网 发布:淘宝联盟app返利 编辑:程序博客网 时间:2024/05/29 04:07
我们在写程序的过程中常常会出现程序需要占用大量内存,但是系统物理内存中根本不存在那么多的内存空间。这个时候我们一般可以考虑使用以下技术来解决问题:

  • 虚拟内存技术
  • 内存映射文件技术


虚拟内存技术:
虚拟内存技术是根据系统页面文件(pagefile.sys)进行页面交换达到切换内存的目的。但是究其本质,我们会发现,虚拟内存技术本质上还是通过对页面文件的交换达到提高物理内存的使用效率问题。

目前在这里先不详谈虚拟内存使用技术。

内存映射文件技术:
内存映射文件技术是通过将文件内容映射到内存空间中,从而实现以下三种目的:
  • 加载和执行DLL或EXE程序;
  • 不使用文件系统IO和缓存来访问磁盘上的数据文件;
  • 进程之间相互进行通信;


那么,我们在这里介绍内存映射文件主要是对目的2来满足我们在物理内存不足的情况下完成内存的使用。

内存映射文件的基本使用步骤如下:
  • 创建/打开一个文件。CreateFile
  • 在这个文件上创建一个文件映射内核对象。CreateFileMapping
  • 将文件映射内核对象的全部或者部分映射到当前进程的进程空间中。MapViewOfFile
  • 步骤3会得到内存指针,直接操作指针即可。
  • 在退出前从内存空间中撤销文件映射内核对象的映射。UnmapViewOfFile
  • 关闭文件映射内核对象。CloseHandle
  • 关闭数据文件。CloseHandle
0 0