2019年12月24日 下午10:51
c语言版本:
内存缓冲区解析 - lovejobs - 博客园
缓冲区顾名思义即为:内存中开辟的一片缓冲区域
- 按类型分为:全缓冲,行缓冲,不带缓冲
- 可以通过标准库函数
setvbuf(_Inout_ FILE * _File, _Inout_updates_opt_z_(_Size) char * _Buf, _In_ int _Mode, _In_ size_t _Size);来设置缓冲区的类型
c++版本
C++ buffer缓冲区的秘密 - 学会走路 - 博客园
下列情况会引发缓冲区的刷新:
- 缓冲区满时
- 执行flush语句
cout<<flush; //将显存的内容立即输出到显示器上进行显示
- 执行endl语句
endl控制符的作用是将光标移动到输出设备中下一行开头处,并且清空缓冲区。
- 关闭文件
- 注:可见,缓冲区满或关闭文件时都会刷新缓冲区,::进行真正的I/O操作::
文件操作演示全缓冲
- 编写这段小代码的目的是验证Windows7下全缓冲的大小是4096个字节,并验证::缓冲区满后会刷新缓冲区,执行真正的I/O操作::。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <fstream> using namespace std; int main() { ofstream outfile("test.txt"); for(int n=0;n<4096;n++) { outfile<<'a'; } outfile<<'b'; system("PAUSE"); outfile<<'c'; system("PAUSE"); outfile('d'); return 0; }
|
键盘操作演示行缓冲
- 当程序调用getchar()函数时,程序就等着用户按键, 用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中) 。当用户键入回车之后,getchar()函数才开始从键盘缓冲区中每次读入一个字符。也就是说,后续的getchar()函数调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才重新等待用户按键。
- 不知道您明白了没有,再通俗一点讲,当程序调用getchar()函数时,程序就等着用户按键,并等用户按下回车键返回。期间按下的字符存放在缓冲区,第一个字符作为函数返回值。继续调用getchar()函数,将不再等用户按键,而是返回您刚才输入的第2个字符;继续调用,返回第3个字符,直到缓冲区中的字符读完后,才等待用户按键。
- ::核心:在执行真正的io操作以前,是有一个隐藏的缓冲区的::