下面这段简单的程序, 如何优化?
| 以下是代码片段: #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, 采用缓冲输出, 估计第二段程序更显优势.