首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >释放内存映射内存

释放内存映射内存
EN

Stack Overflow用户
提问于 2014-06-16 18:17:52
回答 1查看 786关注 0票数 4

我正在内存中将一个大文件(~200 to )映射到一个区域/视图中,然后按顺序写入该文件。我不时地执行一个boost::interprocess::mapped_region::flush(last, current, false)

一段时间后,该进程耗尽了整个系统内存。据我所知,这是正常的,因为它将在其他进程请求内存时释放内存。

但是,在Windows 7上运行似乎不太适合AJA视频卡的驱动程序,它开始影响性能(丢弃IO数据包)。

有没有办法迫使Windows 7将部分内存刷新到磁盘(在写入数据之后,只需要几秒钟时间,并记住我正在按顺序写入整个文件),以避免耗尽整个可用的系统内存?

EN

回答 1

Stack Overflow用户

发布于 2014-06-16 22:52:11

冲厕与填海无关,IYAM。它只会确保写出脏页(我认为您仍然需要磁盘同步来确保它实际上是/hit磁盘/)。

所以,你在找一条通往地图的路。

也许你可以使用这样的函数

  • EmptyWorkingSet将尽可能多地删除页面
  • SetProcessWorkingSetSize临时减少允许的进程工作集。

当然,以一种更便携的方式,您可能只需取消映射和重新映射即可。如果访问是对旋转HDD的,并且在映射之间保持顺序,则可能不会造成性能损失(但是,如果内核预取数据(例如由于madvise()或与之等价的windows ),则可能会造成性能损失。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24249763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档