如果缓冲区大小远大于页面大小,mmap会比读取更有效吗?

时间:2015-01-20 12:36:51

标签: c++ io posix mmap

页面大小为4096字节。假设你想要一个缓冲区两倍,即8192字节。

如果您使用mmap,您将映射8192个字节而不执行任何其他操作(从磁盘读取实际数据)。

然后,当您访问第一个字节时,将发生页面错误,您将执行一个I / O以从磁盘读取第一页。阅读本页后,您将获得第一个字节作为答案。

然后当您访问第4097个字节时,将发生新的页面错误,您将执行额外的I / O以从磁盘读取第二页以获取此字节。

但是,如果使用read,则只需执行一个I / O即可读取8192个字节,然后返回所需的两个字节。

这是一个非常小的例子,但我想一想缓冲区大小是几KB还是MB?看起来mmap有一个大小为4096字节的页面会产生很多I / O,如果你只是调用POSIX read而可以避免这种情况,这让我想知道为什么要使用mmap第一名?

0 个答案:

没有答案