我是这么理解的,比如文件写入,因为库函数有了缓冲区所以不用每次都使用系统调用,所以少了调用次数。
下面这个是我从网上找到的:
现在我们看一下,在没有缓冲区的情况下,利用gcc编译程序并运行,从文件读入一个字符的过程:
用户态程序调用 getc(FILE* stream)
--->
GNU C库 getc
---->系统调用 -----> GNU C返回代码 ---->用户态getc返回 --->读入成功
其中红色文字部分表示比较耗时,代价比较高。试想如果我们读入10000个字符,那么这样一个耗时操作就要执行1000次。
所以,C中引入了缓冲区,缓冲区实际上是一块内存空间,这样当进行系统调用的时候,就不只读一个字符了,C标准库中stdio.h中定义了BUFSIZE就是缓冲区的大小,即每次读入数据的大小。这样结构就发生了变化:
用户态程序调用 getc(FILE* stream)
--->
GNU C库 getc
---->系统调用 ----->读入缓冲区----> GNU C返回代码 ---->用户态getc返回 --->读入成功
遮样当时图读取第二个字符的时候,就免去了红色的部分,而是用缓冲区取代了原来的系统调用部分,大大减少了系统调用的次数。提高程序的效率。