游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5793|回复: 8

相同数量的case时,switch和if谁快啊?

[复制链接]

50

主题

244

帖子

319

积分

中级会员

Rank: 3Rank: 3

积分
319
QQ
发表于 2008-11-30 14:51:00 | 显示全部楼层 |阅读模式
现在我有11个选项,但是遇上了个怪事,switch和if中用了一模一样的代码,理论上应该switch比if快,即使没if快也应该差不多才行的啊。

谁能帮忙解释下原因么?我的代码大概就和以下类似,只是具体的处理过程不在此列出了。

if(..) do1;
else if(..) do2;
else if(..) do3;
..
..
else don;

switch(..)
case1:do1;break;
case2:do2;break;
case3:do3;break;
..
..
casen:don;break;

7

主题

51

帖子

59

积分

注册会员

Rank: 2

积分
59
QQ
发表于 2008-12-1 08:29:00 | 显示全部楼层

Re:相同数量的case时,switch和if谁快啊?

看汇编之后的代码,个人认为程序清晰为上,这点损耗算不了什么

50

主题

244

帖子

319

积分

中级会员

Rank: 3Rank: 3

积分
319
QQ
 楼主| 发表于 2008-12-1 11:56:00 | 显示全部楼层

Re:相同数量的case时,switch和if谁快啊?

呵呵,多谢楼上的朋友。
不过正好相反,正是因为在乎这一点损耗才发此贴,否则我何不自己将就?

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2008-12-1 12:00:00 | 显示全部楼层

Re:相同数量的case时,switch和if谁快啊?

如果能编译成查表的话,switch就比if快

50

主题

244

帖子

319

积分

中级会员

Rank: 3Rank: 3

积分
319
QQ
 楼主| 发表于 2008-12-1 12:21:00 | 显示全部楼层

Re: Re:相同数量的case时,switch和if谁快啊?

psic: Re:相同数量的case时,switch和if谁快啊?

如果能编译成查表的话,switch就比if快

编译成查表?如何控制?

0

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2008-12-3 09:49:00 | 显示全部楼层

Re:相同数量的case时,switch和if谁快啊?

用个函数指针数组

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2008-12-5 00:27:00 | 显示全部楼层

Re:相同数量的case时,switch和if谁快啊?

switch 也是编译成 CMP JUMP
if也是编译成CMP JUMP。
for编译成loop
do/while编译成CMP JUMP

速度差别自己想吧

21

主题

125

帖子

135

积分

注册会员

Rank: 2

积分
135
QQ
发表于 2008-12-5 20:46:00 | 显示全部楼层

Re:相同数量的case时,switch和if谁快啊?

如果你是用 vc2003 或者以上,就不用担心这个。最新的优化技术,可以讲写if和switch编译出来的汇编一样快,但不是最快,最快的是自己写汇编,release不是优化到终极速度。只可以讲是比较优化.
我曾经试过自己写汇编的计算pi。和vc2005优化处理的速度有1/5提升.

21

主题

125

帖子

135

积分

注册会员

Rank: 2

积分
135
QQ
发表于 2008-12-5 20:51:00 | 显示全部楼层

Re:相同数量的case时,switch和if谁快啊?

如果是想深入,那么把release编译出来的反汇编,看下它们的汇编编码。还有指令周期,就可以知道那种写法快,但总的来讲,如果你写的程序不是超讲究效率。那么就不要浪费时间在这个上面。只要实现到功能,之后交给测试员去做这个优化。现在测试员不是单单话测试代码,还需要具备代码优化的知识,否则都是垃圾一个。
鬼佬的物理引擎,图形引擎,等等都是c代码,他们的很少部分才用到汇编优化,比如话内存复制,位图缩放,高斯模糊等等才讲话优化,否则就不使用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 18:50

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表