关于switchcase和ifelse的效率对比分析
2017-12-04 14:28
218 查看
switch...case与if...else的根本区别在于:
switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch...case不用像if...else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。
具体地说,switch...case会生成一份大小(表项数)为最大case常量+1的跳表,程序首先判断switch变量是否大于最大case 常量,若大于,则跳到default分支处理;否则取得索引号为switch变量大小的跳表项的地址(即跳表的起始地址+表项大小*索引号),程序接着跳到此地址执行,到此完成了分支的跳转。
switch相对来说是以空间换时间:
1.当分支较多时,当时用switch的效率是很高的。因为switch是随机访问的,就是确定了选择值之后直接跳转到那个特定的分支,但是if...else是遍历所有的可能值,知道找到符合条件的分支。switch的效率确实比ifelse要高的多。2.switch...case占用较多的代码空间,因为它要生成跳表,特别是当case常量分布范围很大但实际有效值又比较少的情况,switch...case的空间利用率将变得很低。
3.switch...case只能处理case为常量的情况,对非常量的情况是无能为力的。例如 if (a > 1 && a < 100),是无法使用switch...case来处理的。所以,switch只能是在常量选择分支时比ifelse效率高,但是ifelse能应用于更多的场合,ifelse比较灵活。
相关文章推荐
- Java Switch 和 If else 使用效率对比和分析
- 关于if(){}else(){} 和 switch() case的执行效率
- switch case与if else执行效率分析
- 多线程计算pi效率对比分析
- 【转】关于几种访问GameObject方式的效率对比
- switch...case 和 if...else效率比较和优化
- 关于网站表现层和后台的一点思考--以及转载的三大WEB服务器(Apache ,Lighttpd,Nginx)对比分析
- 关于switch语句的case 嵌套
- 复习笔记10 switch 编译器优化的两种方式 和if的效率对比
- 关于常见vb工程中createobject的效率分析
- 关于if和else和switch case的用法和程序编码操作过程
- Solrj和Solr DIH索引效率对比分析
- switch...case 和 if...else效率比较和优化
- 实验四第4题:关于switch...case分支语句的使用
- 嵌入式C++——关于C++的效率分析
- 关于pymongo两种连接方法MongoClient和Connection连接mongodb的写入效率分析
- 关于if else 与switch的效率问题
- [笔记]cin、cout与scanf、printf的效率差异对比分析
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
- switch...case 和 if...else效率比较和优化