社区
C++ 语言
帖子详情
switch为什么比if else效率高?????
argenCHN
2007-02-07 10:13:57
switch不是也要依次比较case吗?
和if差不多啊,为什么效率要高呢?
...全文
17911
46
打赏
收藏
switch为什么比if else效率高?????
switch不是也要依次比较case吗? 和if差不多啊,为什么效率要高呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
46 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wangzhaoyang121
2012-07-20
打赏
举报
回复
学习了
quanyecha198910
2012-06-21
打赏
举报
回复
学习学些
yzzhouyuefeng511
2012-02-10
打赏
举报
回复
很简单 写个测试程序不就得了
在每个switch 的case中和if else中都输出一句话
一开始记录开始时间
结束之后记录结束时间
宇宙379
2011-08-25
打赏
举报
回复
学习了。。。
snowy520
2011-08-19
打赏
举报
回复
[Quote=引用 12 楼 todototry 的回复:]
switch不是也要依次比较case吗?
和if差不多啊,为什么效率要高呢?
____________________________________
谁说的 托出去斩了
==================
switch是在无break的条件时,顺序执行各case,^_^
[/Quote]
是的
asight
2010-10-10
打赏
举报
回复
[Quote=引用 28 楼 fangrk 的回复:]
当有大量的比较的时候,switch的效率应该高一点。
switch的case条件都是编译期整数常量,编译器可以做到表格跳转查询,查找速度快,
缺点是:case条件都是编译期整数常量
if/else是一个挨一个的查询,速度较慢,
优点是:不限比较类型和内容,你可以使用double,float,string或是自定义类型,比较双方不必是编译期常量。
[/Quote]
switch 怎么就是常量呢
T a
switch(a)
case n个
plaodj
2010-08-02
打赏
举报
回复
进来观摩 重点观摩文段较长的楼层
tnt_vampire
2010-06-10
打赏
举报
回复
小更正下
用if-else能够更加详细的表示比较过程和循序,但由于它的条件能够使用变量表达式,索引值很可能在运行期才能够确定下来,这样编译器就不能过早得作一些假设(
更一般来说应该是条件索引的查找算法
)进而优化,而switch-case则相反。
tnt_vampire
2010-06-10
打赏
举报
回复
用if-else能够更加详细的表示比较过程和循序,但由于它的条件能够使用变量表达式,索引值很可能在运行期才能够确定下来,这样编译器就不能过早得作一些假设(指索引值和跳转地址的哈希过程)进而优化,而switch-case则相反。
yangleit
2010-04-01
打赏
举报
回复
我来总结一下吧。
首先大家去看看一本书《C++ Footprint and Performance Optimization》,里面的7章,第一节。
然后根据大量的实际程序测试(不考虑不同的编译器优化程度差异,假设都是最好的优化),那么Switch语句击中第三个选项的时间跟if/else if语句击中第三个选项的时间相同。
击中第一,第二选项的速度if语句快,击中第四以及第四之后的选项的速度switch语句快。
所以,如果所有选项出现概率相同的话,结论就是:5个选项(包括default)的情况下,switch和if/else if相同。低于5个选项if快,高于5给选项switch快!
shaojuntao
2009-09-04
打赏
举报
回复
这么热闹啊
学习了啊
呵呵
原来没什么区别,对于我来说
呵呵
shuker
2009-03-11
打赏
举报
回复
学习了
zuoxiangshan
2009-02-18
打赏
举报
回复
switch 快
一叶孤舟哒
2008-03-12
打赏
举报
回复
if..else和switch的效率到底那个快个人觉得还是switch快点呵呵
jiangchyan
2007-03-09
打赏
举报
回复
不一样的,分情况,有时if else 快,有时switch快
mrdangdong
2007-03-09
打赏
举报
回复
FPGA设计的指导原则
http://www.mcu123.com/news/Article/fpga/FPGA/200607/50.html
Bennyatt
2007-02-09
打赏
举报
回复
不要老拿XXX的书来说话
要想真搞研究 光看书有什么用
要自己研究出一套 有依据的测试方法,再弄个测试程序。
然后自己测试一下,用实践来严正这东西。
这才是真正 想高明白问题 的方式。
要是光凭空想象分析吗。
我觉得 SWITCH可能会快一点点,但是从经验上看不会照IF ELSE结构快太多。
从理论上说 SWITCH 是不是 源于 IF ELSE 呢??
可能后来做了写优化???
这都只是猜测。
大家继续畅所欲言!
晨星
2007-02-09
打赏
举报
回复
主要原因就是对于switch,编译器生成的代码常常并不是一个一个的比较,而是更优化的方式,比如跳转表。而对于if/else,比较难说。
逸学堂
2007-02-09
打赏
举报
回复
mathe
所举的例子,正好是对于少量case下的编译器使用ifelse代替case的情况。
swtich是一般是使用转移表实现,如mathe的例子。
逸学堂
2007-02-09
打赏
举报
回复
今天终于找到这本书<C++高效编程:内存与性能优化>了,也算是给大家一个交待。
因为是纸版,无法把上面的测试数据拷贝下来(实在懒得写下来,找50m吧,她有精力)
测试结果,正如我上面的结论所属。
测试程序可以到www.samspublishing.com网站上找
当然对于不同的版本的编译器,可能最终的结果并不同于书上的测试结果,这也是书上提到的
因为标准中没有规定if else,switch case的效率,所以不要较真。
btw:<C++高效编程:内存与性能优化>第7章基本编程语句之7.1.4选择语句的性能比较
如果想多了解一些,请私下找我
加载更多回复(26)
【揭秘】为什么
switch
...case比if...else执行
效率高
关注、星标公众号,直达精彩内容作者:李肖遥来源:技术让梦想更伟大在C语言中,条件判断语句是程序的重要组成部分,也是系统业务逻辑的控制手段,教科书告诉我们
switch
...case...语...
【C语言】
switch
的实现 &&
switch
与if-else的执行效率比较
(一)
switch
的实现原理 通俗的说,先在内存中把swich里面的case值按照顺序排一个表,当没有那个值时,它对应的就是default. 具体地说,
switch
...case会生成一份大小(表项数)为最大case常量+1的跳表,程序首先判断
switch
变量是否大于最大case 常量,若大于,则跳到default分支处理;否则取得索引号为
switch
变量大小的跳表项的地址(即跳表的起始地址+...
为什么
switch
语句执行效率比 if-else 语句高?
在我们学习流程控制语句时不难发现,很多情况下能使用 if-else 语句的地方我们都能够使用
switch
语句来代替。 有经验的开发者会建议我们,尽量使用
switch
语句来代替繁琐的 if-else。 这样做的原因:
switch
语句的执行效率会比 if-else 语句高。 下面我们就写一个简单的程序来对其进行验证: public class Demo { public static void main(String[] args) { String aaa = "aaa".
为什么
switch
...case比if...else执行
效率高
C语言中,条件判断语句是程序的重要组成部分,也是系统业务逻辑的控制手段,书上说
switch
…case…语句比if…else if…else执行效率要高,但为什么呢?
switch
…case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与
switch
变量的值是相等的。从而,
switch
…case不用像if…else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。 具体地说,
switch
…case会生成一份大小(表项数)为最大case常量+1的跳表,程序首先
switch
case和if else效率区别
switch
…case写法:
switch
(表达式){ case 值1 : 语句1 break; case 值2 : 语句2 break; ... default : 语句n break; } if…else写法: if(boolean){ }else if(boolean){ }else if(boolean){ }else{ } 由此看来,
switch
有点以空间...
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章