14.1.3 缓冲区

    读者可能已对硬件缓冲区比较熟悉了,为了协调计算机快速设备和慢速设备间的通信步伐,计算机中大量使用了硬件缓冲区,如CPU中的Cache,内存也可以看成是一种缓冲区,用于CPU高速处理和相对瓶颈化的硬盘存储速度之间的矛盾。

    流是传输信息的一种逻辑表示,是具有缓冲作用的接口,同样有缓冲区的需求,但这里的缓冲区是一种逻辑概念,同物理设备中的缓冲区有所不同。通常流的缓冲区是作为中介的内存块,它是从设备传递给程序或者由程度传递给设备的临时存储池(Pool),下面从文件输入和文件输出的角度来具体分析缓冲区的作用。

    对于输入操作,程序通常一次只能处理一个或几个字节的信息,如果没有缓冲区,从磁盘文件中读取一个字符都要进行大量的操作,速度很慢,跟不上CPU的节奏,所以C++采取的策略是一次性从磁盘文件中读取大量数据存放在缓冲区(一块内存)中,CPU只要从该内存中提取字节进行操作即可,由于CPU访问内存的速度比访问硬盘的速度快很多,这在一定程度上提高了输入的效率,当缓冲区中的数据读取完毕后,再一次性地读入大量数据,进行重复操作。

    输出操作也是同样的道理,如果每输出一个字节都要进行一次磁盘硬件操作,会导致费时费力,效率低下,同样可开辟一块缓冲区内存,当要写入磁盘的字节信息达到一定数量时,将积累的信息一次性写出。

    理解缓冲区的另一个重点在于“刷新”(Flush),不论缓冲区是否已满,刷新操作可以将缓冲区中存储的字节信息立即输入(传递给程序)或输出(写入磁盘或输出到屏幕上)。