转!论if else与switch的效率高低问题
2024-10-13 05:07:46
转
下面来详细描述switch与ifelse的区别。
switch...case与if...else的根本区别在于,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch...case不用像if...else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。
具体地说,switch...case会生成一份大小(表项数)为最大case常量+1的跳表,程序首先判断switch变量是否大于最大case
常量,若大于,则跳到default分支处理;否则取得索引号为switch变量大小的跳表项的地址(即跳表的起始地址+表项大小*索引号),程序接着跳到此地址执行,到此完成了分支的跳转。
故,当分支较多时,当时用switch的效率是很高的。因为switch是随机访问的,就是确定了选择值之后直接跳转到那个特定的分支,但是if。。else是遍历所以得可能值,知道找到符合条件的分支。switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点。
以下有个比较详细的介绍,链接:
http://www.l99.com/151931/blog/view/77303
最新文章
- SQL server 查询某个表在哪些存储过程(SP)中使用到
- Java for LeetCode 207 Course Schedule【Medium】
- Android ActionBar Home按钮返回事件处理的两种方式
- 不经意间网易开源镜像去掉了FreeBSD的镜像
- Setting up your App domain for SharePoint 2013
- make makefile
- 2014.9.25DOM元素操作
- 读改善c#代码157个建议:建议10~12
- 【iOS开展-94】xcode6如何使用GIT以及如何添加太老项目GIT特征?
- 不要怂,就是GAN (生成式对抗网络) (四):训练和测试 GAN
- BZOJ 3391: [Usaco2004 Dec]Tree Cutting网络破坏(搜索)
- android 集成微博常见问题
- 洛谷 P4168 [Violet] 蒲公英
- JS中的闭包(转自他处)
- 20145212 罗天晨 《网络对抗》Exp3 Advanced 恶意代码伪装技术实践
- vue-13-插件
- 学习BOS物流项目第九天
- 【bug】VUE:Cannot read property '_withTask' of undefined
- Xamarin.Forms第三方XAML预览工具-LiveXAML简单体验
- 【xsy1378】 水题7号 贪心
热门文章
- TCP三次握手
- error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
- github for windows回滚到某一个版本,
- hbase centOS生产环境配置笔记 (1 NameNode, 1 ResourceManager, 3 DataNode)
- WPFの布局中Panel的选用
- WPF调用office2010的ppt出错
- 第三个 android控件
- Java多个数字求和输出
- BZOJ 2584: [Wc2012]memory(扫描线+线段树)
- 禁止在 .NET Framework 中执行用户代码。启用 ";clr enabled"; 配置选项