什么是刷新缓冲区是什么意思?(What does flushing the buffer mean?

2019-07-20 10:10发布

我正在学习C ++,我发现的东西,我不明白:

输出缓冲器可以明确地刷新强制写入缓冲区。 默认情况下,阅读cin刷新cout ; cout当程序正常结束也冲洗。

因此,刷新缓冲区(例如输出缓冲):这是否删除了所有的东西清除缓冲区或是否通过输出在它的一切清空缓冲区? 抑或刷新缓冲区意味着完全不同的东西?

Answer 1:

考虑写入文件。 这是一个昂贵的操作。 如果您的代码在同一时间写一个字节,然后一个字节的每一个写将是非常昂贵的。 因此,为了提高性能的常用方法是存储你是在一个临时的缓冲区写入数据。 只有当有大量的数据被写入到文件的缓冲区。 通过推迟写入,和一气呵成写一大块,性能得到提高。

考虑到这一点,刷新缓冲区中的数据从缓存的文件传输的行为。

这是否清除它删去或是否通过输出一切在它清除缓冲区缓冲区?

后者。



Answer 2:

你引用了答案:

输出缓冲器可以明确地刷新强制写入缓冲区。

也就是说,可能需要“冲洗”的输出,以使其被写入到基础流(其可以是一个文件,或在实施例中列出,终端)。

一般来说,标准输出/ COUT是行缓冲:输出,直到你写一个新行或明确刷新缓冲区不会被发送到OS。 其优点是,类似std::cout << "Mouse moved (" << px << ", " << py << ")" << endl原因只有一个写入基础‘文件’,而不是六个,这是更获得更好的性能。 其缺点是,这样的代码:

for (int i = 0; i < 5; i++) {
    std::cout << ".";
    sleep(1); // or something similar
}

std::cout << "\n";

将输出.....在一次(具体sleep落实,见这个问题 )。 在这种情况下,你会希望有一个附加的<< std::flush ,以确保输出被显示。

阅读cincout ,所以你并不需要一个明确的冲洗做到这一点:

std::string colour;
std::cout << "Enter your favourite colour: ";
std::cin >> colour;


Answer 3:

通过输出都清楚了缓冲区。



文章来源: What does flushing the buffer mean?