社区
C++ 语言
帖子详情
switch为什么比if else效率高?????
argenCHN
2007-02-07 10:13:57
switch不是也要依次比较case吗?
和if差不多啊,为什么效率要高呢?
...全文
17683
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)
你必须知道的495个C语言问题
为什么这些问题如此频繁地出现? 5.15 有没有什么简单点儿的办法理解所有这些与空指针有关的东西呢? 5.16 考虑到有关空指针的所有这些困惑,要求它们的内部表示都必须为0不是更简单吗? 5.17 说真的,真有...
switch
与 if else 效率分析与总结
本文是对网上一些讨论
switch
与 if else 性能的参考资料的总结。 ...[1] if elseif 和
switch
那个执行
效率高
?...[2]从汇编的角度分析C语言(六)
switch
和if...[4]
switch
为什么比if else
效率高
????? [5] if和sw
为什么
switch
语句执行效率比 if-else 语句高?
这样做的原因:
switch
语句的执行效率会比 if-else 语句高。 下面我们就写一个简单的程序来对其进行验证: public class Demo { public static void main(String[] args) { String aaa = "aaa".
Switch
和if else哪个执行
效率高
?如何去选择?
好处就是,无论情况是多少,对执行效率没有影响,但是if else就不一样了,想要更加详细的探讨这个问题,我们要了解现代计算机处理器是采用流水线来获取高性能,采用了分支预测的方法,针对if else语句不是执行到了才...
switch
与ifelse效率
前言资料显示
switch
较if else执行
效率高
。区别
switch
与if else根本区别在
switch
生成一跳转表指示实际case分支地址,该跳转表索引号与
switch
变量值相等。从而
switch
不像if else遍历条件分支直到命中条件,而只需访问...
C++ 语言
64,648
社区成员
250,503
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章