系统调用与库函数对于不同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);

 

函数特点:

 

系统调用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

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值