当应用程序需要更多RAM时,如何允许将一段内存换出到磁盘?

时间:2012-06-28 21:35:16

标签: c++ windows memory-management file-mapping

我有一个大的值矩阵,占用大约2GB的RAM。

我需要形成这个矩阵的副本,然后原件可以换成磁盘,以便稍后加载。该矩阵的内容很重要。最初计算它是昂贵的,所以你不能轻易扔掉它并重新创建它。将矩阵丢弃到磁盘然后从磁盘重新加载它比从头重新计算它更快。

是否有更简单的或更好的方法来指定临时放在磁盘上的内存部分,直到下次访问,而不是我拥有的内容,这是:

当不需要资源(2GB矩阵)时

  • 打开文件
  • 将文件写入磁盘
  • 释放记忆

何时需要资源

  • 打开文件
  • 读入矩阵
  • 从磁盘删除文件

我遇到File mapping但我不确定这是正确的使用

2 个答案:

答案 0 :(得分:3)

查看Memory Mapped Files

  

内存映射文件(MMF)提供了一种允许应用程序的独特内存管理功能   以与访问动态内存通过指针相同的方式访问磁盘上的文件。

操作系统将非常有效地将部分原始矩阵交换到磁盘上。

答案 1 :(得分:2)

假设矩阵不需要在程序重启后继续存在,请将应用程序编译为64位并将矩阵留在内存中。在内存压力下,操作系统将自动换出最少使用的内存页面。

然而,即使是在一个温和的现代硬件上,你也会有超过2 + 2 GB 1 的RAM,并且很有可能一切都将保留在RAM中。

1 原始矩阵+副本。