冲洗缓冲区是什么意思
What does flushing the buffer mean?
我正在学习C++,发现了一些我无法理解的东西:
输出缓冲区可以显式刷新,以强制缓冲区书面的默认情况下,读取
cin
会刷新cout
;cout
也被冲洗当程序正常结束时。
因此,刷新缓冲区(例如输出缓冲区(:这是通过删除缓冲区中的所有内容来清除缓冲区,还是通过输出缓冲区中所有内容来清理缓冲区?或者刷新缓冲区意味着完全不同的东西?
考虑写入文件。这是一项昂贵的手术。如果在代码中一次写入一个字节,那么每次写入字节的成本将非常高。因此,提高性能的一种常见方法是将正在写入的数据存储在临时缓冲区中。只有当有大量数据时,缓冲区才会写入文件。通过推迟写入,并一次性写入一个大的块,可以提高性能。
考虑到这一点,刷新缓冲区就是将数据从缓冲区传输到文件。
这是通过删除缓冲区中的所有内容来清除缓冲区,还是通过输出缓冲区中所有内容来清理缓冲区?
后者。
您已经引用了答案:
可以显式刷新输出缓冲区,以强制写入缓冲区。
也就是说,您可能需要"刷新"输出,以便将其写入底层流(可能是一个文件,或者在所列示例中,是一个终端(。
通常,stdout/cout是行缓冲的:直到您写了一条新行或显式刷新缓冲区时,输出才会发送到操作系统。其优点是类似std::cout << "Mouse moved (" << p.x << ", " << p.y << ")" << endl
的东西只会导致对底层"文件"的一次写入,而不是六次,这对性能来说要好得多。缺点是代码类似:
for (int i = 0; i < 5; i++) {
std::cout << ".";
sleep(1); // or something similar
}
std::cout << "n";
将立即输出.....
(有关sleep
的确切实现,请参阅此问题(。在这种情况下,您将需要一个额外的<< std::flush
来确保显示输出。
读取cin
会刷新cout
,因此不需要显式刷新即可执行此操作:
std::string colour;
std::cout << "Enter your favourite colour: ";
std::cin >> colour;
通过输出所有内容来清除缓冲区。
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 当我们说在执行程序时将操作系统的控制权传递给main()函数时,我们的意思是什么
- 这句话在c++中的意思是什么
- 这个typedef的意思是什么
- 这句话的意思是什么
- 意思是什么
- 这个句法的意思是什么?