一个分号将代码效率提升100倍

    技术2022-05-18  16

    我的做PHP的,近来突发奇想,想比较做同样的事情PHP和C的效率差异。所以写了两段简单的测试代码,因为对C的了解不是太深,所以C的代码是直接从网上找来的。先看代码吧!

    PHP代码:

    <?php $i = 10000000; $a = explode(" ",microtime()); while($i--); $b = explode(" ",microtime()); echo ($b[0] + $b[1]) - ($a[0] + $a[1]),"/n"; ?> C语言代码: #include "stdio.h" #include "stdlib.h" #include "time.h" int main( void ) { long i = 10000000L; clock_t start, finish; double duration; printf( "Time to do %ld empty loops is ", i ); start = clock(); while( i-- ) finish = clock(); duration = (double)(finish - start) / CLOCKS_PER_SEC; printf( "%f seconds/n", duration ); }

    上面两段都是进行一千万次空循环, 

    在我的电脑上测试结果为:

    PHP执行时间为:0.3034秒

    C的执行时间为:3.6400秒

     

    难以置信,难道C的效率还不如PHP,打死我都不信。问题应该出在代码上,来回又看了几遍C的代码,发现了一个不正常的地方:while( i-- )后面没有分号!

    在后面加上分号,重新测试,执行时间为:0.04秒。比PHP快多了,这个结果我还是满意的。

    如果while()后面没有括号也没有分号时,它的作用范围就是到它后面的第一个分号;上面的C代码每次while循环都会多执行一次 finish = clock(),看来这函数还是比较浪费时间的。

    因为少了一个分号,让代码的效率降低了将近100倍。

     

    所以在这里还是提醒大家:写循环时一定要注意它的作用范围,把和循环无关的又占用时间的代码放到循环的外面,代码效率能有很大的提高。

     

    原文来自:苗雨顺的博客 http://blog.csdn.net/rainday0310


    最新回复(0)