2
  1. CreateFileMapping 和 MapViewOfFile,然后我们使用 memcpy 之类的函数进行 I/O。
  2. 只需使用读/写文件。

第一个比第二个快吗?我不明白。

为什么更快?
如果我们使用一个section对象,那么我们可以从VMM或Cache Manager中获得更多的缓存好处吗?

4

2 回答 2

2

发生页出时文件内存映射更快,因为文件本身用作分页存储。

如果内存映射文件中的内存没有更改,则无需将页面刷新到页面文件,因为数据已经在文件中,并且 Windows 可以从磁盘重新读取页面。.EXE 和 .DLL 文件是使用这种机制加载的,因此是它们自己的页面存储。

如果内存映射文件中的内存被写入,则分页与使用分页文件相同。可能更快,因为使用了磁盘上的相同位置(取决于 NTFS 优化)。

普通 API 消耗页面文件支持的内存以在内存中保存文件的内容。

从稍微不同的角度来看,这两个 API 都进行了优化,因为内存映射文件实际上可能会在后台使用读/写文件 API,因此当您使用较低的抽象时,您可以获得微优化

两种机制都将使用 VMM/Cache 管理器。

于 2010-11-10T07:35:33.210 回答
0

使用 ReadFile/WriteFile 涉及多个额外的内存块复制操作,因此它会比使用 MMF 慢。另一个问题是它会慢多少——这是你需要自己衡量的。

于 2010-11-10T08:55:14.177 回答