在C/C++中进行文件I/O操作是否需要创建自己的缓冲区?

3

在C或C++中读写文件时,是否有必要使用自定义缓冲区来减少文件I/O?

例如,如果需要逐个条目(逐个字符或逐个结构体)读取文件,是否建议使用缓冲区来减少对fread()的调用次数?这对I/O(读和写)有任何影响吗?答案是否取决于操作系统或代码之外的其他因素?

我了解到这是建议的做法,但今天有人告诉我,在stdio.h中使用setvbuf(),似乎已经包含了一切,您不需要向程序添加这种复杂性。

在stackoverflow上查看时,我发现一个回答没有得到投票,声称使用fgetc/setvbuf()与fgets之间没有显着差异。这是真的吗?


你应该自己进行基准测试,因为这可能在不同的使用情况下有很大不同。 - Some programmer dude
3个回答

3
< p > fread() 函数已经实现了缓冲以避免过于频繁地调用底层的 read() 函数。除非您进行了一些基准测试并发现文件 I/O 占用大量时间,否则不需要担心它。


1
< p > < code > < stdio.h > 中的函数都具有自己的缓冲区。 有例外情况,但通常我希望它们针对正在运行的系统进行优化,例如缓冲区大小。 在这种情况下,除非是极少数特殊情况,否则我希望使用 < code > setvbuf() 是一种悲观的选择。


0

std::istream对象需要与之关联的std::streambuf对象才能执行读取操作。

用于文件的istreamifstream)的实现内部有一个fstreambuf执行这个操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接