缓冲区
缓冲区又称缓存,是内存空间的一部分,计算机预留出一部分空间,用来暂时保存输入输出的数据,这部分空间就叫做缓冲区。
我们知道电脑CPU的速度远大于人敲击键盘的速度,还有读写硬盘、向显示器输出的速度,也就是远大于IO的速度,为了提高效率,让CPU更好的得到利用,就引入了缓冲区的概念。
有了缓冲区,将数据先放入缓冲区,等到一定的时机再拿出来,这样不仅提高了CPU的效率,也减少了程序的等待时间。
而且每一次由用户程序到硬件设备都要进行好几层转换,放入缓冲区,就大大减少了转换的次数。
缓冲区的类型
一般分为全缓冲、行缓冲、不带缓冲
全缓冲
缓冲区被填满后才进行真正的输入输出操作,典型代表是:对硬盘的读写。
行缓冲
- Linux下的printf函数
printf("Hello, ");
sleep(5);
printf("World!\n");
执行上面的操作我们可以看到程序是暂停了5秒钟,一起输出了Hello, World! 是因为第一个printf函数没有遇到换行符,就将字符串放入缓冲去,去执行下一句操作,直到在第二条语句才遇到换行符,这个时候刷新缓冲区,将缓冲区的数据一块打印。
- scanf函数
对于scanf函数,不管用户输入多少内容,只要不按下回车键,就不进行真正的读取,所以scanf函数是带有行缓冲的函数。
不带缓冲
不缓存数据,直接进行输入输出。
- getche(), 和 getch()函数,不缓存数据
- windows下的printf()函数,不管最后有没有换行符,都会立即输出。
缓冲区的刷新
- 缓冲区满时会自动刷新
- 关闭文件时会刷新缓冲区
- 程序关闭时也会刷新缓冲区
- 特定函数会手动刷新缓冲区——fflush(stdout)。