![1412bab4944a08fab2a33bd41ffe368f.png](https://img-blog.csdnimg.cn/img_convert/1412bab4944a08fab2a33bd41ffe368f.png)
在最近的几场比赛中,部分赛题牵扯到缓冲区的知识,之前对这块的知识还不够特别的理解,所以抽时间来总结一下。
一、什么是缓冲区机制
首先我们要知道什么是缓冲区
总的来说,缓冲区是内存空间的一部分,在内存中预留了一定的存储空间,用来暂时保存输入和输出等I/O
操作的一些数据,这些预留的空间就叫做缓冲区;而buffer
缓冲区和Cache
缓存区都属于缓冲区的一种buffer
缓冲区存储速度不同步的设备或者优先级不同的设备之间的传输数据,比如键盘、鼠标等;此外,buffer
一般是用在写入磁盘的;Cache
缓存区是位于CPU和主内存之间的容量较小但速度很快的存储器,Cache
保存着CPU刚用过的数据或循环使用的数据;Cache
缓存区的运用一般是在I/O
的请求上
缓存区按性质分为两种,一种是输入缓冲区,另一种是输出缓冲区。对于C、C++程序来言,类似cin、getchar等输入函数读取数据时,并不会直接从键盘上读取,而是遵循着一个过程:cingetchar --> 输入缓冲区 --> 键盘
,我们从键盘上输入的字符先存到缓冲区里面,cingetchar
等函数是从缓冲区里面读取输入;那么相对于输出来说,程序将要输出的结果并不会直接输出到屏幕当中区,而是先存放到输出缓存区,然后利用coutputchar
等函数将缓冲区中的内容输出到屏幕上。cin
和cout
本质上都是对缓冲区中的内容进行操作。
二、为什么使用缓冲区机制
减少CPU对磁盘的读写次数;CPU读取磁盘中的数据并不是直接读取磁盘,而是先将磁盘的内容读入到内存,也就是缓冲区,然后CPU对缓冲区进行读取,进而操作数据;计算机对缓冲区的操作时间远远小于对磁盘的操作时间,大大的加快了运行速度。下面一个图片描述的就是这样的一个过程