mmf如何在Windows中运行?

我在Windows中创build了一个基于文件的MMF。 然后我做了一个2GB的视图,并检查了通过读取中间某个地方的4个字节来访问数据的速度。 这几乎是瞬间的,所以很显然它在几毫秒内不会有整个2GB的红色。

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

  1. 它是否等我读了一些东西,然后从文件中读取特定的部分?
  2. 当进程正在做其他事情时,它是否将自己加载到内存中?
  3. 如果它本身没有加载到RAM中,它是否将已经在那里红色的部分保存为caching?
  4. 这是不是魔术?

映射视图时,将在虚拟地址空间和磁盘上的页面之间创建一个映射。 没有数据被读取。

只有当您尝试访问某些数据时,映射到该内存地址的页面才会被读入缓存(生成页面错误,迫使操作系统读取内存中的映射页面)。

所以,要回答你的观点:

  1. 是。
  2. 不,但操作系统可能会将某些数据预取到磁盘缓存中(这与“填充映射视图”不完全相同)。
  3. 是的,那些可能会在后台写入磁盘(甚至可能在需要时释放)。
  4. 是! 🙂