首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

【C语言】while与for实施效率对比【转】

2012-08-01 
【C语言】while与for执行效率对比【转】【C语言】while与for执行效率对比【转】?C语言编译环境: Microsoft Visual

【C语言】while与for执行效率对比【转】

【C语言】while与for执行效率对比【转】

?

C语言编译环境: Microsoft Visual C++ 6.0(SP6)

?

测试程序

?

?

    4:????void?forTest()??5:????{??0040D3F0???push????????ebp??0040D3F1???mov?????????ebp,esp??0040D3F3???sub?????????esp,48h??0040D3F6???push????????ebx??0040D3F7???push????????esi??0040D3F8???push????????edi??0040D3F9???lea?????????edi,[ebp-48h]??0040D3FC???mov?????????ecx,12h??0040D401???mov?????????eax,0CCCCCCCCh??0040D406???rep?stos????dword?ptr?[edi]??6:????????int?num?=?1234;??0040D408???mov?????????dword?ptr?[ebp-4],4D2h??7:????????long?sum?=?0;??0040D40F???mov?????????dword?ptr?[ebp-8],0??8:??9:????????for(;(num--)>0;)??0040D416???mov?????????eax,dword?ptr?[ebp-4]??0040D419???mov?????????ecx,dword?ptr?[ebp-4]??0040D41C???sub?????????ecx,1??0040D41F???mov?????????dword?ptr?[ebp-4],ecx??0040D422???test????????eax,eax??0040D424???jle?????????forTest+41h?(0040d431)??10:???????{??11:???????????sum?=?sum?+?num;??0040D426???mov?????????edx,dword?ptr?[ebp-8]??0040D429???add?????????edx,dword?ptr?[ebp-4]??0040D42C???mov?????????dword?ptr?[ebp-8],edx??12:???????}??0040D42F???jmp?????????forTest+26h?(0040d416)??13:??14:???????printf("forTest:%d\n",sum);??0040D431???mov?????????eax,dword?ptr?[ebp-8]??0040D434???push????????eax??0040D435???push????????offset?string?"forTest:%l\n"?(00422e80)??0040D43A???call????????printf?(0040d6e0)??0040D43F???add?????????esp,8??15:???}??0040D442???pop?????????edi??0040D443???pop?????????esi??0040D444???pop?????????ebx??0040D445???add?????????esp,48h??0040D448???cmp?????????ebp,esp??0040D44A???call????????__chkesp?(0040d6a0)??0040D44F???mov?????????esp,ebp??0040D451???pop?????????ebp??0040D452???ret??

?

--- No source file ?-------------------------------------------------------------------

0040D3F0~0040D406: 保存栈现场 总共10条指令

?0040D408: 迭代次数 总共1条指令

?0040D40F: 保存加法结果 总共1条指令

0040D416~0040D42F: for循环 总共10条指令

0040D431~0040D43F: 打印结果 总共5条指令

0040D442~0040D452: 恢复栈现场 总共9条指令

合计: 36条指令

?

由此可见,for循环习惯写法for(int i=0;i<num;i++)执行效率低于for(;(num--)>0;)写法,而for(;(num--)>0;)写法执行效率与while((num--)>0)相同.


因此,一棒子打死说for循环执行效率比while循环慢是不对的.


【Java语言】while与for执行效率对比:?经查看class文件反编译指令发现,Java中执行for循环与执行while循环所需的指令数是一样的,二者执行效率相同.

热点排行