前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >缓冲区刷新在 C++ 中意味着什么?

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

作者头像
鲸落c
发布2022-11-14 16:41:49
5140
发布2022-11-14 16:41:49
举报
文章被收录于专栏:鲸落学习笔记鲸落学习笔记

theme: channing-cyan highlight: a11y-dark


「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

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

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

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

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

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

代码语言:javascript
复制
// 下面是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;
}
代码语言:javascript
复制
上面的程序会一次性输出 1 2 3 4 5 。

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

代码语言:javascript
复制
// 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;
}
代码语言:javascript
复制
上面的程序将打印 
数字(1 2 3 4 5)一个一个而不是一次。 
原因是刷新功能刷新了输出 
立即到文件/终端。

笔记:

  1. 你无法在在线编译器上运行该程序来查看差异,因为它们仅在程序终止时才提供输出。因此,您需要在 GCC 或 clang 等离线编译器中运行上述所有程序。
  2. 读取 cin 会刷新 cout,因此我们不需要显式刷新来执行此操作。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档