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

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

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


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


通常,当我们打开任何 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)一个一个而不是一次。 
原因是刷新功能刷新了输出 
立即到文件/终端。
复制代码


笔记:


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


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



目录
相关文章
|
10月前
|
存储 芯片 内存技术
DRAM集中刷新,分散刷新,异步刷新的区别
DRAM集中刷新,分散刷新,异步刷新的区别
496 0
|
8月前
简单的清理缓冲区
简单的清理缓冲区
|
9月前
|
存储 缓存 数据处理
缓存与缓冲区的区别
在计算机科学中,缓存(Cache)和缓冲区(Buffer)是两个常见的概念。尽管它们的功能有些相似,但它们在实际应用中具有不同的用途和工作原理。本文将介绍缓存和缓冲区之间的区别。
344 0
【文件随机读写和文件缓冲区】
1.1fseek函数 根据文件指针的位置和偏移量来定位文件指针。 看不懂没关系,举个例子你就明白了。 我们首先在text.txt文件中放入 “abcdef” 这些字符。
|
Linux C语言 Windows
【Linux进程】四、printf函数的缓冲区刷新机制与父子进程间的“读共享写拷贝”问题
【Linux进程】四、printf函数的缓冲区刷新机制与父子进程间的“读共享写拷贝”问题
186 0
【Linux进程】四、printf函数的缓冲区刷新机制与父子进程间的“读共享写拷贝”问题
缓冲区提前释放,导致H264保存及播放错误
缓冲区提前释放,导致H264保存及播放错误
64 0
|
缓存 Linux
缓存区的刷新及配置
缓存区的刷新及配置
138 0
|
存储 缓存 Java
高并发之伪共享和缓存行填充(缓存行对齐)(@Contended)
高并发之伪共享和缓存行填充(缓存行对齐)(@Contended)
335 0
高并发之伪共享和缓存行填充(缓存行对齐)(@Contended)
|
存储 缓存 Java
【Android 逆向】函数拦截 ( 使用 cache_flush 系统函数刷新 CPU 高速缓存 | 刷新 CPU 高速缓存弊端 | 函数拦截推荐时机 )
【Android 逆向】函数拦截 ( 使用 cache_flush 系统函数刷新 CPU 高速缓存 | 刷新 CPU 高速缓存弊端 | 函数拦截推荐时机 )
124 0
【Android 逆向】函数拦截 ( 使用 cache_flush 系统函数刷新 CPU 高速缓存 | 刷新 CPU 高速缓存弊端 | 函数拦截推荐时机 )