簡體   English   中英

文件系統I / O緩沖區

[英]File system I/O buffer

考慮以下偽代碼片段以從文件末尾讀取文件

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' 這是否大部分由文件系統緩沖所補償,還是我應該始終一次讀取較大的塊?

答案取決於您的操作系統。 大多數現代操作系統都使用系統頁面大小的倍數作為文件緩沖區。 這樣,4KB(在大多數系統上最常見的頁面大小)可能是磁盤緩存所容納的最小單位。 更大的問題是您的代碼正在進行大量的冗余系統調用,這很昂貴。 如果您擔心性能,可以考慮將需要的數據mmap()緩沖,然后直接從緩沖區中引用該數據;如果系統支持,則調用mmap()並直接訪問映射的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM