IT技术博客大学习 共学习 共进步

一次简单C程序的性能优化

AnySQL.net 2009-11-06 09:17:49 累计浏览 6,781 次
本机暂存

       下面这段简单的程序, 如何优化?

以下是代码片段:
#include 
    void main ()
    {
     int i;
     for (i=0;i<20000000;i++)
     {
         printf("%012d\\n",i);
     }
    }

       下午居然想到要来优化这段程序, 并且写出了更好的程序, 性能提升了30%, 从18秒提升到了12秒.

以下是代码片段:
#include 
    typedef struct _NUMERLIST
    {
       int len;
       char buf[5];
    } NUMBERLIST;
    void printNumber(int num, NUMBERLIST numlist[])
    {
       int v_num,i,j,k,pos=0;
       char tmpbuf[32];
       memset(tmpbuf,0,32);
       v_num=num;
       for(i=3;i>=0;i--)
       {
     v_num = num;
     for(k=0;k
     v_num = v_num % 1000;
     if (v_num > 999)
         pos = pos + sprintf(tmpbuf+pos,"%03d", v_num);
           else
     {
         memcpy(tmpbuf+pos, numlist[v_num].buf,3);
         pos = pos + 3;
     }
       }
       printf("%s\\n", tmpbuf);
    }
    void main ()
    {
     NUMBERLIST numlist[1000];
     int i;
     for (i=0;i<1000;i++)
     {
         sprintf(numlist[i].buf, "%03d", i);
     }
     for (i=0;i<20000000;i++)
     {
         printNumber(i, numlist);
     }
    }
    

       如果优化一下两个程序的IO, 采用缓冲输出, 估计第二段程序更显优势.

建议继续学习

  1. 如何成为Python高手 (累计阅读 54,900)
  2. 哪本书是对程序员最有影响、每个程序员都该阅读的书? (累计阅读 15,020)
  3. Linux 性能监控、测试、优化工具 (累计阅读 12,941)
  4. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,720)
  5. 为什么算法这么难? (累计阅读 12,320)
  6. 浅谈MySQL索引背后的数据结构及算法 (累计阅读 11,480)
  7. 加州求职记 (累计阅读 11,440)
  8. Rolling cURL: PHP并发最佳实践 (累计阅读 11,420)
  9. 看源代码那些事 (累计阅读 10,521)
  10. PHP程序的执行流程 (累计阅读 9,961)