while与for执行效率对比

C语言 while 与 for 循环性能对比:5 种场景下的汇编指令与执行效率分析 本文深入对比了C语言中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。

Python 实现循环的最快方式(for、while 等速度对比,Python原生开发如何深入进阶 这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。 阅读详情

相关推荐

Python实现循环的最快方式(for、while 等速度对比)

众所周知,Python 不是一种执行效率较高的语言。此外在任何语言中,循环都是一种非常消耗时间的操作。假如任意一种简单的单步操作耗费的时间为 1 个单位,将此操作重复执行上万次,最终耗费的时间也将增长上万倍。...

Gtieguo的博客 846

C语言——for循环和while循环的效率区别——类似哨兵思想

int ID_Conv_Sentinel(int u16device_cfg_num) { int i8id; int size=0; int i=0; size = sizeof(Device_ID_Table)/sizeof(Device_ID_Table[0]); while(Device_ID_Table[i]!=u16device_cfg_num) ...

liming0931的专栏 2564

【Kingbase人大金仓】授权文件更换

本文介绍了金仓数据库授权文件更换的步骤:1.通过ksql或客户端工具查询数据库版本;2.在官网下载对应版本的license.bat文件;3.替换前先备份原授权文件(使用tar命令压缩),再用新文件覆盖原文件。注意事项包括:版本号需严格对应,授权文件通常位于安装目录下,可使用find命令查找具体位置。操作需谨慎,建议先备份原文件以便恢复。

qq_34463511的博客 3455

工控随笔_20_西门子_WinCC的VBS脚本_09_常量和流程控制_02

  vbs不但提供了分支结构,还提供了丰富的循环形式。一共有3种循环:   1、for循环   2、do...loop循环   3、while循环   各种循环有各自的特点,在使用的时候可以进行转换。   前面已经描述过For循环,这里简单的描述一下后面两种循环。 一、Do....loop循环    Option Explicit 'do loop 循环 'do l...

weixin_34239169的博客 817

国标Gb28181里Contact和Route的使用

国标Gb28181是基于Sip协议的,因此对Contact和Route的使用,也可以说是Sip里Contact和Route的使用。Contact和Route则是sip协议里的头字段。 现在,在使用国标Gb28181来做项目时,经常会遇到这种情况,国标的下级是在内网里,上级在公网上。如果不做处理,下级到上级会经过nat协议的转换从而导致上级向下级发送请求时(比如获取目录请求)不能到达

wwyyxx26的专栏 5511

c 语言编程 脚本之家,wincc c脚本实例wincc赋值程序

但是,使用Replace函数,可以巧妙地解决这个问题strName表示要删除的映射驱动器名的字符串值说不定在设为单一使用者後,还来不及建立另外的连线时,就有其他的Process先进入该资料库DoDo While (SocketObj.State <> 7)WScript.Echo "Try Connect to " & RemoteHost & ":" & Re...

weixin_31034309的博客 2333

【电机应用控制】——步进电机控制原理(四相五线/两相四线/细分驱动)&驱动器&梯形/S形加减速算法&直线/圆弧插补

步进电机是一种把电脉冲信号转换为角位移(左)或线位移(右)的电动机。两相通常1.8°,三相通常1.2°、无相通常0.72°,角位移=脉冲个数X步距角。在非超载且不超频的情况下,电机的旋转位置只取决于脉冲个数,转速只取决脉冲信号的频率。所以只需要统计脉冲个数和频率,不再需要编码器测速和位置,具有优秀的开环能力,当然也可接编码器反馈速度和位置数据,实现更加精准的闭环控制。永磁式动态性能好,输出力矩大,但步距角大通常7.5°;反应式(磁阻式)结构简单成本低,步距角小一般1.2°,但振动噪音大动态性能差;

weixin_51658186的博客 5万+

C语言for循环快还是while循环快?直接开测!

C语言for循环快还是while循环快?直接开测!

Troubadour~的博客 896

MCAL知识点(十):ERU驱动配置详解

ERS:外部请求单元ETL:中断逻辑单元OGU:输出逻辑单元MCU里面配置要使用的功能和选择输入的管脚,注意上述模块关注点讲述的ERU必须和边沿检测模块相关联。

梦想技术家 1221

后摄模块辐射超标整改

某行车记录仪在EMI测试中出现辐射超标问题,通过模块剥离法定位到后摄模块的Ethernet数据线为噪声源。深入检查发现TYPE-C延长线屏蔽层未有效接地,形成辐射泄漏通道。整改措施包括加强屏蔽层360°接地、使用导电布改善连接处屏蔽等,最终使辐射降至EN55032 Class B限值以内。案例揭示了高速信号延长线中屏蔽连续性的重要性,建议设计阶段就重视连接器屏蔽设计和共模干扰抑制。

硬核科技 255

循环之for、while、do-while、goto的底层效率

各个循环的底层执行效率为默认情况下。

Q7826的博客 534

uniapp:实现圆盘/色盘取色器组件,圆环颜色选择器用户可拖拽选择颜色值实时更新用户选择的颜色数据,拖动丝滑流畅不卡顿(uniapp小程序/手机h5网页/安卓苹果app/nvue都能使用,详细源码)

uniapp项目中使用颜色选择器,uniapp实现简单圆形色盘、取色器、拾色器组件,Uniapp自定义颜色选择器取色器,圆形的颜色选择器,uniapp颜色拾取器,拾色器 取色器 颜色选择器,uniapp vue3圆形的色盘取色,uni-app如何封装一个取色器组件,用uniapp写调色板,uniapp颜色选择器插件,实现圆环颜色选择器,Uni-app在App端使用颜色选择器,uniapp微信小程序圆盘颜色选择,uniapp H5网页实现圆形的取色器,使用canvas实现的简单圆形色盘,可自定义相关大小,un

✅ 精选推荐文章 4534

while和for的效率c语言,【C语言】while与for执行效率对比

【C语言】while与for执行效率对比C语言编译环境: Microsoft Visual C++ 6.0(SP6)测试程序#include "stdio.h"void forTest(){int num = 1234;// 迭代次数long sum = 0;// 保存加法结果for(int i=0;i{sum = sum + i;// 计算结果}printf("forTest:%d\n",sum...

weixin_29176179的博客 1306

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

【C语言】while与for执行效率对比【转】   C语言编译环境: Microsoft Visual C++ 6.0(SP6)   测试程序     C代码   #include "stdio.h"      void forTest()   {       int num = 1234;                 // 迭代次数   ...

萧瑟中的苦索 1012

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

【Java语言】while与for执行效率对比   测试环境(虚拟机版本): sun jdk build 1.6.0_22-b04   测试程序   /** * Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC) * All rights reserved. * Author: Jarg ...

爪哇哥的爪哇岛 http://yeshaoting.cn/ 719

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

    【C语言】while与for执行效率对比   C语言编译环境: Microsoft Visual C++ 6.0(SP6)   测试程序     #include "stdio.h" void forTest() { int num = 1234; // 迭代次数 long sum = 0; // 保存加法结果 for(int...

爪哇哥的爪哇岛 http://yeshaoting.cn/ 2763

java 效率_【Java语言】while与for执行效率对比

【Java语言】while与for执行效率对比测试环境(虚拟机版本): sun jdk build 1.6.0_22-b04测试程序/*** Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC)* All rights reserved.* Author: Jarg Yee * http://jarg.iteye.com/*/...

weixin_42355411的博客 477

c语言for与while意义,【C语言】while与for实施效率对比

【C语言】while与for执行效率对比C语言编译环境: Microsoft Visual C++ 6.0(SP6)测试程序#include "stdio.h"void forTest(){int num = 1234;// 迭代次数long sum = 0;// 保存加法结果for(int i=0;i{sum = sum + i;// 计算结果}printf("forTest:%d\n",sum...

weixin_34324618的博客 189

while和for的效率c语言,【C语言】while与for实施效率对比【转】

【C语言】while与for执行效率对比【转】【C语言】while与for执行效率对比【转】C语言编译环境: Microsoft Visual C++ 6.0(SP6)测试程序C代码#include"stdio.h"voidforTest(){intnum=1234;//迭代次数longsum=0;//保存加法结果for(inti=0;i{sum=sum+i;...

weixin_36289742的博客 558

java for foreach 效率_java中for foreach while循环的比较

在java中究竟是一般的for循环,还是for的增强型foreach,或是while的执行效率比较快呢,我用了一个简单的程序来分析3种循环public static void main(String[] args) {List map = new ArrayList();for (int i = 0; i < 100000; i++) {map.add(i);}long currTime =...

weixin_42444974的博客 359

关于for while的效率问题

首先比较for与while的效率问题必须保证循环次数一致 下面简单的分析for与while的效率问题就从最简单的无限循环开始,其余相同: for(;;){ }while(1){ } 这两句都实现了无限循环的功能,使用gcc编译成汇编代码为: for: .file "for.c" .text .globl main .type main, @function main: .LF

紫雨倾红尘的专栏 3608

java 中while编译之后_Java for(;;)编译后变成while(true)

@顾晓北:同是死循环,两种写法的性能有差异for(;;) 编译后00401033jmp main+23h (00401033)只有一条指令;; 会变成两条空语句和无条件跳转指令jmp,没有额外的寄存器开销,执行效率上略高而 while (true) 编译后是这样的00401028mov eax,10040102D test eax,eax0040102F je main+23h (004...

weixin_34766547的博客 611

for循环详解与实战技巧

本文介绍了C语言中for循环的基本语法、执行流程及实践应用。for循环由初始化表达式、条件判断和变量调整三部分组成,适用于循环次数明确的场景。文章通过打印1-10的示例演示其用法,并与while循环进行对比,指出for循环结构更清晰。最后提供了计算1-100间3的倍数之和的练习题,并给出基础实现和优化版本(直接以3为步长迭代),后者效率更高。

祯的博客 670
上一篇: 怎样实现自己的printf
下一篇: 使用scanf字符输入时遇到的问题
zhouxf_cn
博客等级 码龄14年 54粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值