C和PHP中while和for效率的一点研究
2011-04-28 14:20
387 查看
在网上看到很多关于while和for循环效率的讨论,有说一样没区别的,也有说这个快或者另一个更快的。
看了很多也没有一个比较一致的结论,个人觉得这种东西没个绝对,for和while都有各自的优缺点,关键是我们要根据情况的不同进行最佳的选择,当然,确定哪个是最佳的不是一件很容易的工作。
下面我分别使用for和while进行1亿次的空循环,并统计消耗的时间。
分别在C和PHP两种语言下进行了测试:
先看C语言的代码:
while:
for:
执行结果:
while: 0.300000 秒
for : 0.270000 秒
把循环次数改为10亿后重新测试,执行结果
while: 2.92 秒
for : 2.66 秒
看来在C中,对于空循环,for和效率明显要比while高。
再来看看PHP代码:
while:
for:
执行结果:
while: 2.9293 秒
for : 3.3837 秒
和C语言的测试结果正好相反,在PHP中,这种情况下while的效率明显高于for循环。
PHP是由C语言编写的,类似的代码,却有截然不同的结果,令人费解。
实践是检验真理的唯一标准!
这句话太正确,别人的真理只适合别人,想要找到自己的真理就要动手去实践!
附1:
测试环境:
OS:Ubuntu 9.10
CPU: Pentium(R) Dual-Core CPU E5400 @ 2.70GHz
Mem: 2G
附2:
下面是从网上找来的一点资料,关于C中for和while效率的分析,比较底层。
初学C语言到现在也有三年的时间了,while 和 for 循环的争议 一直存在同学和老师之间,从没停过 后来学习嵌入式程序,指令周期的概念逐渐变得重要起来,痛定思痛 决定仔细看一下 基于UV4.0的编译器 对汇编代码进行了分析 对时间做了一个统计 发现不同状况下 差别还是蛮大的 /*************************************************************************************************************************** 当while 和for 的循环体内 是空语句时: ****************************************************************************************************************************/ i = 10; while(--i); for(i =10 ;i;i--); for(i =10 ;i;--i) 以上三条语句效率相同 对应1条汇编语句 2个机器周期 for(i =0 ;i<10;++i) for(i =0 ;i<10;i++) 以上两条语句效率相同 对应2条汇编语句 3个机器周期 但while(i--); 效率很低 为4条语句 6个机器周期 /*************************************************************************************************************************** 当while 和for 的循环体内 不是空语句时: ****************************************************************************************************************************/ for(* ; i ; *) 的效率最高 依然是1条指令 2个机器周期 for(* ; i<10 ; *) 的效率次之 2条指令 3个机器周期 while(i--) 8个机器周期 while(--i) 6个机器周期 while( i++ < * ) 10个机器周期 while( ++ i< * ) 8个机器周期 /**************************************************************************** 推荐使用 for(;i;) *****************************************************************************/ 另外 如果 循环变量 i 是通过函数参数 形式传递的值 for()的效率降低到 6-8个机器周期 总体来说: 如果循环变量是参数 且循环体为空 while(--i); 是最高效的 其他情况建议 使用 for(*;i ;*){} while(i--)这个被大多数人看好的语句 无论哪种情况下 效率都是最低的;
本文来自:苗雨顺的CSDN http://blog.csdn.net/rainday0310
看了很多也没有一个比较一致的结论,个人觉得这种东西没个绝对,for和while都有各自的优缺点,关键是我们要根据情况的不同进行最佳的选择,当然,确定哪个是最佳的不是一件很容易的工作。
下面我分别使用for和while进行1亿次的空循环,并统计消耗的时间。
分别在C和PHP两种语言下进行了测试:
先看C语言的代码:
while:
#include<stdio.h> #include<time.h> int main() { int i = 1000000000; clock_t start,end; double spent; start = clock(); while(i--); end = clock(); spent = (double) (end - start) / CLOCKS_PER_SEC; printf( "%f seconds\n", spent ); }
for:
#include<stdio.h> #include<time.h> int main() { int i; clock_t start,end; double spent; start = clock(); for(i=1000000000;i;i--); end = clock(); spent = (double) (end - start) / CLOCKS_PER_SEC; printf( "%f seconds\n", spent ); }
执行结果:
while: 0.300000 秒
for : 0.270000 秒
把循环次数改为10亿后重新测试,执行结果
while: 2.92 秒
for : 2.66 秒
看来在C中,对于空循环,for和效率明显要比while高。
再来看看PHP代码:
while:
<?php $i = 100000000; $a = explode(" ",microtime()); while($i--); $b = explode(" ",microtime()); echo ($b[0] + $b[1]) - ($a[0] + $a[1]),"\n"; ?>
for:
<?php $a = explode(" ",microtime()); for($i=100000000;$i;$i--); $b = explode(" ",microtime()); echo ($b[0] + $b[1]) - ($a[0] + $a[1]),"\n"; ?>
执行结果:
while: 2.9293 秒
for : 3.3837 秒
和C语言的测试结果正好相反,在PHP中,这种情况下while的效率明显高于for循环。
PHP是由C语言编写的,类似的代码,却有截然不同的结果,令人费解。
实践是检验真理的唯一标准!
这句话太正确,别人的真理只适合别人,想要找到自己的真理就要动手去实践!
附1:
测试环境:
OS:Ubuntu 9.10
CPU: Pentium(R) Dual-Core CPU E5400 @ 2.70GHz
Mem: 2G
附2:
下面是从网上找来的一点资料,关于C中for和while效率的分析,比较底层。
初学C语言到现在也有三年的时间了,while 和 for 循环的争议 一直存在同学和老师之间,从没停过 后来学习嵌入式程序,指令周期的概念逐渐变得重要起来,痛定思痛 决定仔细看一下 基于UV4.0的编译器 对汇编代码进行了分析 对时间做了一个统计 发现不同状况下 差别还是蛮大的 /*************************************************************************************************************************** 当while 和for 的循环体内 是空语句时: ****************************************************************************************************************************/ i = 10; while(--i); for(i =10 ;i;i--); for(i =10 ;i;--i) 以上三条语句效率相同 对应1条汇编语句 2个机器周期 for(i =0 ;i<10;++i) for(i =0 ;i<10;i++) 以上两条语句效率相同 对应2条汇编语句 3个机器周期 但while(i--); 效率很低 为4条语句 6个机器周期 /*************************************************************************************************************************** 当while 和for 的循环体内 不是空语句时: ****************************************************************************************************************************/ for(* ; i ; *) 的效率最高 依然是1条指令 2个机器周期 for(* ; i<10 ; *) 的效率次之 2条指令 3个机器周期 while(i--) 8个机器周期 while(--i) 6个机器周期 while( i++ < * ) 10个机器周期 while( ++ i< * ) 8个机器周期 /**************************************************************************** 推荐使用 for(;i;) *****************************************************************************/ 另外 如果 循环变量 i 是通过函数参数 形式传递的值 for()的效率降低到 6-8个机器周期 总体来说: 如果循环变量是参数 且循环体为空 while(--i); 是最高效的 其他情况建议 使用 for(*;i ;*){} while(i--)这个被大多数人看好的语句 无论哪种情况下 效率都是最低的;
本文来自:苗雨顺的CSDN http://blog.csdn.net/rainday0310
相关文章推荐
- C和PHP中while和for效率的一点研究
- 关于 while(1)和for(;;)效率问题的一点想法
- 关于 while(1)和for(;;)效率问题的一点想法
- PHP 数组的遍历的几种方式(以及foreach与for/while+each效率的比较)
- 关于 while(1)和for(;;)效率问题的一点想法
- 关于 while(1)和for(;;)效率问题的一点想法
- 关于 while(1)和for(;;)效率问题的一点想法
- php break,for,while,dowhile,switch,continue,goto,常量
- php代码优化 -- array_walk 和 foreach, for 的效率的比较
- for、while、foreach性能比较-PHP篇
- while和for的效率问题
- PHP5.4 的while / for / break / continue
- Python while、for、生成器、列表推导等语句的执行效率测试
- oauth2-server-php for windows 的那些坑 (研究中...)
- while (1) 与 for 谁效率更高
- 从汇编看for和while循环的效率
- PHP中For、While、Foreach循环的比较
- for、while、foreach性能比较-PHP篇
- PHP循环语句深度理解分析——while, for, foreach, do while
- 用for和while遍历HashMap效率测试