[英]Is there any need to create my own buffer for file I/O operations in C/C++?
是否需要使用自定義緩沖區來讀取或寫入 C 或 C++ 中的文件以減少文件 I/O?
例如,如果您需要逐條讀取文件條目(一次一個字符,或一次一個結構),是否建議使用緩沖區減少對 fread() 的調用次數? 它對 I/O(讀和寫)有什么影響嗎? 答案是否取決於操作系統或代碼中沒有的其他內容?
我了解到這是推薦的,但今天有人告訴我stdio.h
上的setvbuf()
,似乎一切都已經存在,您不需要將這種復雜性添加到您的程序中。
查看 stackoverflow,我找到了一個沒有投票的答案,聲稱使用fgetc
/ setvbuf()
與fgets
之間沒有顯着差異。 真的是這樣嗎?
fread()
function 已經實現了緩沖,以避免過於頻繁地調用較低級別的read()
。 除非您進行一些基准測試並發現文件 I/O 花費了大量時間,否則您不必擔心它。
<stdio.h>
中的函數都進行自己的緩沖。 有例外,但一般來說,我希望它們針對運行的系統進行優化,例如緩沖區大小。 在這種情況下,除了少數非常特殊的情況外,我希望在所有情況下使用setvbuf()
都是悲觀的。
std::istream
object 需要與其關聯的std::streambuf
object 才能實際執行讀取操作。
istream ( ifstream
) 文件的實現內部有一個fstreambuf
就是這樣做的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.