Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47992
  • 博文数量: 33
  • 博客积分: 1301
  • 博客等级: 中尉
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-31 21:06
文章分类
文章存档

2009年(33)

我的朋友

分类: C/C++

2009-06-19 22:11:34

 
大量数据读写:
效率 fgets > scanf > getchar
 
灵活度相反
 
小量数据频繁读写,
效率 getchar > scanf > fgets,这里getchar比scanf几乎快一倍,而scanf只比fgets快一点点。
 
 
 
下面是测试的程序,我用 TIMEFORMAT="" time ./test < ~/tmp/bochs-2.4.tar.gz 命令,通过修改scanf和fgets每次读取的字节数(2和1024)来观察fgets,scanf 和 getchar 效率的区别。
明显单位是1024的时候,fgets > scanf > getchar,单位是2的时候,getchar > scanf > fgets。

#include<stdio.h>

int main(){
    /*
      char s[1024];
      while(scanf("%2s", s) != EOF)
      ;
    */

    
      int ch;
      while((ch = getchar()) != EOF)
      ;
    
    /*
      char s[1024];
      while(fgets(s, 2, stdin) != NULL)
      ;
    */

}

命令是TIMEFORMAT="" time ./test < ~/tmp/bochs-2.4.tar.gz
bochs-2.4.tar.gz文件总共3.9MB,(环境是vmware, red hat linux 9)

用fgets(s, 1024, stdin)时:
0.00user 0.01system 0:00.01elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (74major+12minor)pagefaults 0swaps

用fgets(s, 2, stdin)时:
0.37user 0.00system 0:00.39elapsed 94%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (74major+12minor)pagefaults 0swaps

用scanf("%1024s", s)时:
0.08user 0.00system 0:00.10elapsed 73%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (79major+12minor)pagefaults 0swaps

用scanf("%2s", s)时:
0.29user 0.02system 0:00.32elapsed 96%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (79major+12minor)pagefaults 0swaps

用ch = getchar()时:
0.13user 0.04system 0:00.18elapsed 91%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (72major+12minor)pagefaults 0swaps


阅读(1263) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~