[英]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.