- CreateFileMapping 和 MapViewOfFile,然后我们使用类似 memcpy 的函数进行 I/O。
- 只需使用读/写文件。
第一个比第二个快吗? 我不明白。
为什么更快?
如果我们使用节对象,那么我们可以从 VMM 或缓存管理器中获得更多的缓存优势吗?
最佳答案
发生页面调出时,文件内存映射速度更快,因为文件本身用作分页存储。
如果内存映射文件中的内存未更改,则无需将页面刷新到页面文件,因为数据已经在文件中,Windows 可以从磁盘重新读取页面。 .EXE 和 .DLL 文件使用此机制加载,因此是它们自己的页面存储。
如果内存映射文件中的内存被写入,那么page out就好像已经使用过分页文件一样。可能更快,因为使用了磁盘上的相同位置(取决于 NTFS 优化)。
普通 API 使用页面文件支持的内存来保存内存中的文件内容。
从略微不同的角度来看,这两个 API 都进行了优化,因为内存映射文件实际上可能会在后台使用读/写文件 API,因此您可以在使用较低的抽象时获得微优化
这两种机制都将使用 VMM/缓存管理器。
关于windows - 具有部分对象(CreateFileMapping)的 I/O 是否比基本 api(Read/WriteFile)更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4142125/