mmf 在 windows 中如何表现?

How does a mmf behave in windows?

我在 windows 中创建了一个基于 MMF 的文件。然后我做了一个 2gb 的视图,并通过读取中间某处的 4 个字节来检查我可以多快地访问数据。它几乎是瞬时的,所以很明显它不可能在几毫秒内将整个 2gb 变为红色。

这让我很好奇,它是如何工作的?

  1. 它是否在等待我读取某些内容然后从文件中读取该特定部分?
  2. 它是否在进程做其他事情的同时在后台将自己加载到内存中?
  3. 如果它不自己加载到RAM中,它是否将我已经红色的部分保留在那里作为缓存?
  4. 是魔法吗?

映射视图时,会在您的虚拟地址 space 和磁盘上的页面之间创建一个映射。尚未读取任何数据。

仅当您尝试访问某些数据时,映射到该内存地址的页面才会被读入缓存(生成页面错误,迫使 OS 读取映射页面( s) 在内存中).

所以,回答你的观点:

  1. 是的。
  2. 不,但是 OS 可能正在将一些数据预取到磁盘缓存中(这与 'filling your mapped view' 不完全相同)。
  3. 是的,这些可能会在后台写入磁盘(甚至可能在需要时释放)。
  4. 是的! :)