搜索
查看: 4670|回复: 4

请问CASE效率高还是IF效率高

[复制链接]
发表于 2009-7-12 22:48:45 | 显示全部楼层 |阅读模式 来自 中国–广东–深圳
最近很喜欢用CASE写插件。
问下CASE的效率是否比IF的要高

各有什么好处?麻烦版大说说.....
发表于 2009-7-17 18:03:49 | 显示全部楼层 来自 中国–福建–漳州
本帖最后由 Rulzy 于 2009-7-17 18:19 编辑

一般来说,使用case语句效率会比使用IF语句高很多,并且使用case语句显得更易懂。
case语句编译为二进制代码时,一般是直接使用一个跳转语句。
例如,如下代码:
  1. switch(i)
  2. {
  3.     case 1: {...}
  4.     case 2: {...}
  5.     case 3: {...}
  6. }
复制代码
可能会编译成这样类似于这样(只是直观表示,并不完全符合汇编语言的语法):
  1. 地址1:JMP DWORD PTR [地址n+(i-1)*4]
  2. 地址2:......  //对i=1的处理
  3. ........
  4. 地址3:......  //对i=2的处理
  5. ........
  6. 地址4:......  //对i=3的处理
  7. ......
  8. 地址n:dd 地址2
  9. 地址n+1:dd 地址3
  10. 地址n+2:dd 地址4
复制代码
这样就会根据i的值,直接跳转到指定的地址,不需要像if语句那样一个一个判断,效率会高很多。

但是 case 语句判断的只能是原始数据类型(整数、字符类型等),不能是字符串、浮点数、函数等(大多数语言是这样)。
回复

使用道具 举报

 楼主| 发表于 2009-7-18 12:17:45 | 显示全部楼层 来自 中国–广东–揭阳
好 ! 非常感谢肉肉
回复

使用道具 举报

发表于 2009-7-18 14:13:07 | 显示全部楼层 来自 中国–广东–深圳
长见识了,多谢肉肉
回复

使用道具 举报

发表于 2009-8-12 16:40:20 | 显示全部楼层 来自 中国–湖南–株洲
CASE只计算一次值 然后都是test,jmp, if...else  是每个条件都要计算一遍的.
不过这种高效率 没什么用 差别也不是很大 LZ应该从你的算法和机器上下手 才能真正提高
总的来说if...else和switch的实现不一样;
编译完后,if...else是一条比较指令;
swtich是一张地址表。

这里扯远一点,如果用switch的话,case里的值最好步进为一,因为汇编会用case的值做表的索引,步进小的话越好处理;一般处理是用枚举来定义case的值,然后再case中引用;
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

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