缓冲输出与内存分配

来源:互联网 发布:网络主播黑名单第二批 编辑:程序博客网 时间:2024/05/01 03:26

程序输出有两种方式:一种是即时处理方式,另一种是先暂时存起来,然后再大块写入的方

式,前者往往造成较高的系统负担。因此,C语言实现通常都允许程序员进行实际的写操作

之前控制产生的输出数据量。

setbufstdout, buf;

此语句通知输入输出库,所有写入到stdout的输出都应该使用buf作为输出缓冲区,直到buf

缓冲区被填满或者程序员直接调用fflush(对于由写操作打开的文件,调用fflush将导致输

出缓冲区的内容被实际的写入该文件),缓冲区的大小有<stdio.h>中的BUFSIZ定义。

 

#include <stdio.h>

 

//char buf[BUFSIZ];

 

void main()

{

     int c;

    

     static char buf[BUFSIZ];

 

     setbuf(stdout, buf);

    

     while((c = getchar()) !=  EOF)

     {

              putchar(c);

     }

 

     printf("/n");

}

 

Buf缓冲区最后一次被清空是在什么时候?

答案是在main函数结束之后,作为程序交回控制给操作系统之前C运行时库必须进行的

理工作的一部分。局部变量的Buf字符数组会在main结束时释放。有两种方法可保证buf

被清空前不被释放:让缓冲区成为静态数组(或全局数组)、动态分配缓冲区,如:

setbuf(stdout, malloc(BUFSIZ));

不必检查malloc函数调用是否成功,因为setbuf函数的第二个参数取值可以为NULL,此

时标准输出不需要进行缓冲,这样程序仍然能够工作,只不过速度比较慢

原创粉丝点击