缓冲区刷新在 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,因此我们不需要显式刷新来执行此操作。



目录
相关文章
|
存储 芯片 内存技术
DRAM集中刷新,分散刷新,异步刷新的区别
DRAM集中刷新,分散刷新,异步刷新的区别
834 0
|
2月前
|
存储 编译器 C语言
如何在 C 语言中判断文件缓冲区是否需要刷新?
在C语言中,可以通过检查文件流的内部状态或使用`fflush`函数尝试刷新缓冲区来判断文件缓冲区是否需要刷新。通常,当缓冲区满、遇到换行符或显式调用`fflush`时,缓冲区会自动刷新。
|
2月前
|
机器学习/深度学习 存储 缓存
【CVDEBUG-1】- 页面文件太小,无法完成操作怎么办
在执行深度学习任务时,尤其是YOLO训练过程中,可能会遇到“页面文件太小,无法完成操作”的错误。这通常是由于Windows内存分配不足导致的。解决方法包括清理C盘空间和调整虚拟内存大小。具体步骤为:1) 清理桌面、系统文件夹、回收站及浏览器缓存;2) 调整虚拟内存设置。操作后重启电脑即可解决问题。
96 0
有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;
有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;
|
存储 缓存 数据处理
缓存与缓冲区的区别
在计算机科学中,缓存(Cache)和缓冲区(Buffer)是两个常见的概念。尽管它们的功能有些相似,但它们在实际应用中具有不同的用途和工作原理。本文将介绍缓存和缓冲区之间的区别。
655 0
【文件随机读写和文件缓冲区】
1.1fseek函数 根据文件指针的位置和偏移量来定位文件指针。 看不懂没关系,举个例子你就明白了。 我们首先在text.txt文件中放入 “abcdef” 这些字符。
|
Linux C语言 Windows
【Linux进程】四、printf函数的缓冲区刷新机制与父子进程间的“读共享写拷贝”问题
【Linux进程】四、printf函数的缓冲区刷新机制与父子进程间的“读共享写拷贝”问题
245 0
【Linux进程】四、printf函数的缓冲区刷新机制与父子进程间的“读共享写拷贝”问题
|
缓存 Linux
缓存区的刷新及配置
缓存区的刷新及配置
210 0

相关实验场景

更多