阅读 112

缓冲区刷新在 C++ 中意味着什么?

缓冲区刷新是将计算机数据从临时存储区域传输到计算机的永久内存。例如,如果我们对文件进行任何更改,我们在一台计算机屏幕上看到的更改会临时存储在缓冲区中。 

通常,当我们打开任何 word 文档时,临时文件就会存在,并在我们关闭主文件时自动销毁。因此,当我们保存我们的工作时,自上次保存以来我们对文档所做的更改将从缓冲区刷新到硬盘上的永久存储。

在 C++ 中,我们可以显式刷新以强制写入缓冲区。通常,std::endl函数通过插入换行符并刷新流来工作。stdout/cout 是行缓冲的,即在您编写换行符或显式刷新缓冲区之前,输出不会发送到操作系统。例如

// 只写入一次底层文件而不是 5 次,这对性能来说要好得多。 std::cout << a << " + " << b << " = " << std::endl; 复制代码

但是有一定的缺点,比如, 

// 下面是C++程序 #include <iostream> #include <thread> #include <chrono> using namespace std; int main() { for (int i = 1; i <= 5; ++i) { cout << i << " "; this_thread::sleep_for(chrono::seconds(1)); } cout << endl; return 0; } 复制代码

上面的程序会一次性输出 1 2 3 4 5 。 复制代码

因此,在这种情况下,会使用额外的 “刷新” 功能来确保根据我们的要求显示输出。例如,

// C++程序演示flush函数的使用 #include <iostream> #include <thread> #include <chrono> using namespace std; int main() { for (int i = 1; i <= 5; ++i) { cout << i << " " << flush; this_thread::sleep_for(chrono::seconds(1)); } return 0; } 复制代码

上面的程序将打印  数字(1 2 3 4 5)一个一个而不是一次。  原因是刷新功能刷新了输出  立即到文件/终端。 复制代码

笔记: 

  1. 你无法在在线编译器上运行该程序来查看差异,因为它们仅在程序终止时才提供输出。因此,您需要在 GCC 或 clang 等离线编译器中运行上述所有程序。

  2. 读取 cin 会刷新 cout,因此我们不需要显式刷新来执行此操作。


作者:鲸落_
链接:https://juejin.cn/post/7031455528723152927


文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐