是否需要为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()
函数已经实现了缓冲,以避免频繁调用较低级别的read()
。除非您做了一些基准测试并发现文件I/O占用了大量时间,否则您不应该担心它。
<stdio.h>
中的函数都有自己的缓冲。有例外,但一般来说,我希望它们能针对他们运行的系统,例如缓冲区大小。其中在这种情况下,我认为使用setvbuf()
除了一些非常特殊的情况。
std::istream
对象要求与其关联的std::streambuf
对象实际执行读取操作。
istream文件(ifstream
)的实现在内部有一个fstreambuf
,它就是这样做的。
相关文章:
- 如果普通默认构造函数不执行任何操作,为什么我们不能使用 malloc 创建平凡可构造的对象?
- 使用CLANG内联程序集创建C++预增量操作
- 在c++中从包含新操作的python中创建的pb图创建图
- 调用函数来创建 WinAPI 按钮不会执行任何操作
- 在张量流中创建新操作时指定形状句柄的形状(输出张量的秩问题)
- 访问新创建的操作时出现问题
- 需要帮助创建一个休眠条件的循环,当满足条件时,它会停止,直到下一个操作
- 如果不在派生类实现中执行此操作,"basic_streambuf"是否会创建自己的获取/放置区域?
- 如何在 cocos2d-x 中创建自定义操作
- 如何创建辅助数据结构来跟踪 c++ 中 decrease_key 操作的堆索引
- 通过创建循环简化一些重复操作的代码
- 如何在C++中创建一个网格,这将允许我将每个索引设置为一个向量,以便以后操作该向量,然后绘制它
- 如何创建不执行任何操作的 #define
- 如何在单个自定义操作项目中创建多个C 自定义操作
- 此对象创建期间发生哪些复制/分配操作
- 如何在 C++ 上使用互操作创建 Excel 文件
- 是否需要为C/C++中的文件I/O操作创建自己的缓冲区
- 如何为多个流操作创建别名
- 用位操作创建字符的问题
- 为数据密集型操作创建日志