C++--流程控制语句
来源:互联网 发布:软件概要设计范文 编辑:程序博客网 时间:2024/04/30 09:44
从底层谈流程控制语句
一般语句是从低地址到高地址(从上往下)顺序执行的,而流程控制语句则不是顺序执行而是通过 jxx 和 cmp (跳转和比较)指令实现的。而不同的流程控制语句之间效率的比较,我们主要是看它们跳转的次数多少,越少跳转,效率越高。不过这些,编译器一般会做优化,如把跳转次数多的控制语句转换成次数少的语句等。if…else 与 switch语句的比较
if 语句条件判断对应的汇编跳转指令的条件是相反的,因为if是为真则不跳转,所以对应的汇编指令是为假则跳转。而switch的条件判断与汇编指令的条件判断是一致的。而且switch语句的执行效率要比if…elseif…这种语句要高,其具体原因:(1)首先是switch语句的跳转次数更少,它的底层汇编操作是把所有条件比较和所有具体执行语句分成两块写,这样只需先顺序比较,找到匹配,跳转到对应case语句体,只需1次跳转。而if形式的是将每条条件比较指令后紧跟对应语句体,即每比较一次就得跳转一次。(2)再者,对于switch语句编译器还做了优化,会生成对应地址表和索引表,可以不需要比较,直接匹配到对应的case语句体。do,while,for比较
不谈编译器优化,它们的效率高低是:do > while > for,因为底层do语句只需跳转一次,while需要跳转两次,for则需要跳转3次。不过编译器一般会做优化,如会把while, for语句转换成do语句形式。
0 0
- C++--流程控制语句
- 流程控制语句(C#)
- C#—流程控制语句
- C语言 流程控制语句
- C语言-流程控制语句
- 【C#】流程控制语句-条件语句
- 【C#】流程控制语句—循环语句
- 【C#】流程控制语句—跳转语句
- C 语言之流程控制语句
- C语言语句及流程控制
- 【C#】穿马甲的流程控制语句
- 【C#】基础知识—流程控制语句
- C#—运算符、控制流程语句
- 【C#】C#中的流程控制语句
- [C++]C++的流程控制语句
- [C++]C++的流程控制语句
- [我眼中的C#]流程控制语句
- 流程语句控制语句
- 最短路径问题
- 页面倒计时自动跳转的js脚本
- tableview中的零散问题
- 营销QQ添加好友限制完美解决方案
- [Go] 生成的程序后台运行
- C++--流程控制语句
- Fresco导入android studio方法
- IOS中block的声明定义和使用 一
- 解析android 流量监测的实现原理
- 安装TFS插件 长时间停留在calculating requirements and dependencies
- Reverse Integer
- Launch Screen 做开机启动图
- 可变长参数的函数的写法
- network is unreachable 解决方案之一