文件系统I / O缓冲区

时间:2014-04-07 21:44:07

标签: c posix

考虑以下伪代码片段从其结尾读取文件

while (1) {
  seek(fd, offset, SEEK_END)
  read(fd, buf, n)

  // process the buffer, break on EOF...

  offset -= n
}

现在n可以在1 byte之间变化,让我们说1kB

对于非常小的n s,对文件系统的影响有多大?这是通过文件系统缓冲大部分来补偿的,还是我应该一次读取更大的块?

1 个答案:

答案 0 :(得分:3)

答案取决于您的操作系统。大多数现代操作系统使用系统页面大小的倍数作为文件缓冲区。因此,4KB(大多数系统上最常见的页面大小)可能是磁盘缓存所占的最小单位。更大的问题是您的代码正在进行大量冗余系统调用,而这些调用很昂贵。如果您担心性能问题,可以考虑在大块中缓冲您认为需要的数据,然后直接从缓冲区引用该数据,或者如果您的系统支持并直接访问映射文件,则调用mmap()。 p>