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

来源:互联网 发布:选软件网 编辑:程序博客网 时间:2024/06/05 16:39

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

 

By wangshudian@ gmail.com

 

一、实验说明

 

函数原型:

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

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

 

函数特点:

 

系统调用writeunbuffered的;

库函数fwritebuffered的。

 

参考文献:

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

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

《C专家编程》

《程序员的自我修养》

《Beginning Linux Programming》 

二、实验数据

我上传到附件了:

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

 

三、观察分析

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

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

 

 

三、实验结论

 

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

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

 

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

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

 

 

原创粉丝点击