3

是否需要使用自定义缓冲区在 C 或 C++ 中读取或写入文件以减少文件 I/O?

例如,如果您需要逐个读取文件条目(一次一个字符,或一次一个结构),是否建议使用缓冲区减少对 fread() 的调用次数?它对 I/O(读写)有什么影响吗?答案是否取决于操作系统或代码中没有的任何其他内容?

我知道这是推荐的,但今天有人告诉我关于setvbuf()on stdio.h,似乎一切都已经存在,您不需要将这种复杂性添加到您的程序中。

查看stackoverflow,我找到了一个没有投票的答案,声称使用fgetc/setvbuf()与. 之间没有显着差异fgets。这是真的吗?

4

3 回答 3

3

该函数已经实现了缓冲以避免过于频繁fread()地调用较低级别。read()除非您进行一些基准测试并发现文件 I/O 占用了大量时间,否则您不必担心。

于 2012-04-04T07:08:50.437 回答
1

所有的函数<stdio.h>都有自己的缓冲。有例外,但一般来说,我希望它们针对它们运行的​​系统进行优化,例如缓冲区大小。setvbuf()在这种情况下,除了少数非常特殊的情况外,我希望使用是一种悲观情绪。

于 2012-04-04T07:26:00.080 回答
0

std::istream对象std::streambuf要求与其关联的对象实际执行读取操作。

istream( ifstream) 的文件实现在内部有一个fstreambuf可以做到这一点。

于 2012-04-04T07:26:18.307 回答