我对内存映射输入/输出没有太多经验,但是第一次使用后,我被它们的速度惊呆了。在我的性能测试中,我发现从内存映射文件读取比通过常规C++ stdio读取快30倍。
我的测试数据是一个3GB的二进制文件,其中包含20个大型双精度浮点数数组。我的测试程序结构是,调用外部模块的读取方法,该方法在幕后使用内存映射I/O。每次调用读取方法时,这个外部模块都会返回一个指向数据的指针和大小。从这个方法返回后,我调用memcpy将返回缓冲区的内容复制到另一个数组中。因为我正在使用memcpy从内存映射文件中复制数据,所以我预期内存映射读取不会比普通stdio快得多,但我很惊讶它快了30倍。
为什么从内存映射文件读取如此快?
PS:我使用的是Windows机器。我对我的I/O速度进行了基准测试,我的机器最大磁盘传输速率约为90 MiB/s。