概述
程序输出有两种方式:一种是即时处理方式,另一种是先暂时存起来,然后再大块写入的方
式,前者往往造成较高的系统负担。因此,C语言实现通常都允许程序员进行实际的写操作
之前控制产生的输出数据量。
setbuf(stdout, 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,此
时标准输出不需要进行缓冲,这样程序仍然能够工作,只不过速度比较慢
最后
以上就是留胡子烧鹅为你收集整理的缓冲输出与内存分配的全部内容,希望文章能够帮你解决缓冲输出与内存分配所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复