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

我们在写程序的过程中常常会出现程序需要占用大量内存,但是系统物理内存中根本不存在那么多的内存空间。这个时候我们一般可以考虑使用以下技术来解决问题:

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


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

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

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


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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值