【发布时间】:2014-12-14 21:03:22
【问题描述】:
我在内存映射 i/o 方面没有太多经验,但在第一次使用它们之后,我对它们的速度感到震惊。在我的性能测试中,我发现从内存映射文件读取比通过常规 c++ stdio 读取快 30 倍。
我的测试数据是一个 3GB 的二进制文件,它包含 20 个大型双精度浮点数组。我的测试程序的结构方式是调用外部模块的读取方法,该方法在后台使用内存映射 i/o。每次我调用 read 方法时,这个外部模块都会返回一个指针和指针指向的数据的大小。从这个方法返回后,我调用 memcpy 将返回的缓冲区的内容复制到另一个数组中。由于我正在执行 memcpy 以从内存映射文件中复制数据,因此我预计内存映射读取不会比普通 stdio 快得多,但令我惊讶的是它快了 30 倍。
为什么从内存映射文件读取速度如此之快?
PS:我使用的是 Windows 机器。我对我的 i/o 速度进行了基准测试,我的机器的最大磁盘传输速率约为 90 MiB/s
【问题讨论】:
标签: c++ windows memory-mapped-files