簡體   English   中英

是否需要為 C/C++ 中的文件 I/O 操作創建自己的緩沖區?

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

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