Sunday, July 8, 2012

缓冲输出

最近在读C Traps and Pitfalls,上面有提到一个叫做“缓冲输出”的概念,意思就是先把要输出的数据保存在一块内存中,当这块内存填满的时候再把数据全部输出。与直接输出相比,缓冲输出有较高的效率。

说来正巧,在提交Hidden Password那题的代码时,我一时懒惰注释掉debug语句,本以为没有太大关系,结果竟然超时了。注释掉debug语句后却飞速通过。

出于好奇,本人增加了一个数组buffer[BUFSIZ],并且在程序开始加入setbuf(stderr,buffer).结果,程序运行速度和没有debug语句时没有太大差别。

看来,缓冲输出会带来性能的提升,尤其是在需要大量输出数据时。

不过需要注意的是,一般情况下stderr是不缓冲的,这是为了避免程序意外终止时错误信息还留在缓冲区中没有打印出来。

No comments:

Post a Comment