读书人

系统调用与库函数对于不同buffer size

发布时间: 2012-06-20 20:37:21 作者: rapoo

系统调用与库函数对于不同buffer size写文件效率对比

系统调用与库函数对于不同bufSize写文件耗时对比

By wangshudian@ gmail.com

一、实验说明

函数原型:

int write(int fd, char *buf, unsigned bufSize);

int fwrite(char *ptr, unsigned size, unsigned n, FILE *fp);

函数特点:

系统调用write是unbuffered的;

库函数fwrite是buffered的。

参考文献:

李梦雨《文件IO函数和标准IO库函数的读写效率研究》

下面基本书对系统调用与库函数的联系和区别也有讲解:

《C专家编程》

《程序员的自我修养》

《Beginning Linux Programming》

二、实验数据

我上传到附件了:

http://download.csdn.net/detail/autoca/4349293

三、观察分析

(1)对于系统调用write,当入参buffer size远小于文件系统的block size(4096字节)时,效率极低;当入参buffer size接近或大于block size时效率接近最优。

(2)对于库函数fwrite,入参buffer size(size*n)的变化对写文件效率影响不明显,其效率高于write最优值的1/2(想必是fwrite对write做了封装,多了一层调用,于是表现出1/2的关系)。

三、实验结论

如果是多次循环,每次只写少量字符,那么库函数效率高。

如果循环次数少,每次都写大块数据,那么系统调用效率高。

在对效率有特殊要求的场合,建议使用write且必须选取最优buffer size。

对于一般应用,建议使用标准库函数,无需多虑。

读书人网 >其他相关

热点推荐