while与for执行效率对比

原文地址http://bbs.chinaunix.net/thread-2306235-1-1.html

  1. #include "stdio.h"

  2. void forTest()
  3. {
  4. int num = 1234; // 迭代次数
  5. long sum = 0; // 保存加法结果

  6. for(int i=0;i<num;i++) // 传统for循环写法
  7. {
  8. sum = sum + i; // 计算结果
  9. }

  10. printf("forTest:%d\n",sum);
  11. }

  12. void whileTest()
  13. {
  14. int num = 1234; // 迭代次数
  15. long sum = 0; // 保存加法结果

  16. while((num--)>0)
  17. {
  18. sum = sum + num; // 计算结果
  19. }

  20. printf("whileTest:%d\n",sum);
  21. }


  22. void main()
  23. {
  24. forTest();
  25. whileTest();
  26. }

whileTest()函数

0040D760~0040D776: 保存栈现场 总共10条指令

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

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

0040D786~0040D79F: while循环 总共10条指令

0040D7A1~0040D7AF: 打印结果 总共5条指令

0040D7B2~0040D7C2: 恢复栈现场 总共9条指令

合计: 36条指令

forTest()函数
0040D3F0~0040D406: 保存栈现场 总共10条指令

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

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

0040D416~0040D439: for循环 总共12条指令

0040D43B~0040D449: 打印结果 总共5条指令

0040D44C~0040D45C: 恢复栈现场 总共9条指令

合计: 38条指令

程序中for循环用的是传统写法,做下更改将for(int i=0;i<num;i++)改为for(;(num--)>0;)

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)相同.

一般来说,do..while循环要比for,while循环的效率要高,这点可以从你做过的汇编分析中看出,而且在深入理解计算机一书的第三章3.6.5节中的讲述也可以看出在对上述循环语句进行汇编时,会先将for,while转换为do..while。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值