释放内存映射内存

时间:2014-06-16 18:17:52

标签: c++ windows boost memory-mapped-files

我将大文件(~200GB)映射到单个区域/视图并依次写入它。我不时地执行boost::interprocess::mapped_region::flush(last, current, false)

一段时间后,该过程耗尽整个系统内存。根据我的理解,这是正常的,因为它将释放内存作为其他进程请求内存。

这在Windows 8上运行良好。但是,在Windows 7上运行它似乎与AJA视频卡的驱动程序不兼容,并且它开始影响性能(丢弃IO数据包)。

有没有什么方法可以强制Windows 7将部分内存刷新到磁盘上(在写入数据之后,它只有几秒钟有趣,并且记得我按顺序写入整个文件),至于不要耗尽整个可用的系统内存?

1 个答案:

答案 0 :(得分:3)

法拉盛与填海工程无关,IYAM。它只是确保写出脏页(我认为你仍然需要一个磁盘同步以确保它实际/击中磁盘/)。

所以,你正在寻找一种取消映射的方法。

也许你可以使用像

这样的功能

当然,以更便携的方式,您可能只是取消映射和重新映射。如果访问是旋转HDD并且在重映射之间保持顺序,则可能没有性能损失(如果内核预取数据,例如由于madvise()或其等效的窗口,可能会有)