mmf 在 windows 中如何表现?
How does a mmf behave in windows?
我在 windows 中创建了一个基于 MMF 的文件。然后我做了一个 2gb 的视图,并通过读取中间某处的 4 个字节来检查我可以多快地访问数据。它几乎是瞬时的,所以很明显它不可能在几毫秒内将整个 2gb 变为红色。
这让我很好奇,它是如何工作的?
- 它是否在等待我读取某些内容然后从文件中读取该特定部分?
- 它是否在进程做其他事情的同时在后台将自己加载到内存中?
- 如果它不自己加载到RAM中,它是否将我已经红色的部分保留在那里作为缓存?
- 是魔法吗?
映射视图时,会在您的虚拟地址 space 和磁盘上的页面之间创建一个映射。尚未读取任何数据。
仅当您尝试访问某些数据时,映射到该内存地址的页面才会被读入缓存(生成页面错误,迫使 OS 读取映射页面( s) 在内存中).
所以,回答你的观点:
- 是的。
- 不,但是 OS 可能正在将一些数据预取到磁盘缓存中(这与 'filling your mapped view' 不完全相同)。
- 是的,这些可能会在后台写入磁盘(甚至可能在需要时释放)。
- 是的! :)
我在 windows 中创建了一个基于 MMF 的文件。然后我做了一个 2gb 的视图,并通过读取中间某处的 4 个字节来检查我可以多快地访问数据。它几乎是瞬时的,所以很明显它不可能在几毫秒内将整个 2gb 变为红色。
这让我很好奇,它是如何工作的?
- 它是否在等待我读取某些内容然后从文件中读取该特定部分?
- 它是否在进程做其他事情的同时在后台将自己加载到内存中?
- 如果它不自己加载到RAM中,它是否将我已经红色的部分保留在那里作为缓存?
- 是魔法吗?
映射视图时,会在您的虚拟地址 space 和磁盘上的页面之间创建一个映射。尚未读取任何数据。
仅当您尝试访问某些数据时,映射到该内存地址的页面才会被读入缓存(生成页面错误,迫使 OS 读取映射页面( s) 在内存中).
所以,回答你的观点:
- 是的。
- 不,但是 OS 可能正在将一些数据预取到磁盘缓存中(这与 'filling your mapped view' 不完全相同)。
- 是的,这些可能会在后台写入磁盘(甚至可能在需要时释放)。
- 是的! :)