【发布时间】:2012-07-08 16:50:14
【问题描述】:
我了解默认情况下 C++ 支持的所有流 IO 都是缓冲的。
这意味着要输出的数据被放入缓冲区直到它满了,然后发送到输出设备,同样对于输入,一旦缓冲区为空,数据就会被读取......所有这些都是为了数字可以最大限度地减少昂贵的系统调用。
但是如何在行动中验证这种行为。我的意思是考虑以下代码
int main()
{
cout << "Hello world\n";
return 0
}
这里的缓冲在哪里出现?我知道有缓冲发生,但如何解释呢?输出会立即显示在屏幕上,那么有什么代码示例可以实际看到缓冲 I/O 的运行情况?
【问题讨论】:
-
在cout的情况下,缓冲区是1个字节。当你读/写文件时,真正的缓冲就会发挥作用。
-
@Mr.Anubis 你是怎么理解的?不,这不一定是真的。
-
@KonradRudolph 好吧,我不记得这句话的来源,但大多数情况下都会发生这种情况
-
@Mr.Anubis 在标准流中没有使用 1 字节缓冲区的情况。
std::cout正常缓冲。 (这与 C 中的stdout不同,它是行缓冲的@ 有效地模拟了它。)