tooya 发表于 2009-7-12 22:48:45

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

最近很喜欢用CASE写插件。
问下CASE的效率是否比IF的要高

各有什么好处?麻烦版大说说.....

Rulzy 发表于 2009-7-17 18:03:49

本帖最后由 Rulzy 于 2009-7-17 18:19 编辑

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

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

tooya 发表于 2009-7-18 12:17:45

好 ! 非常感谢肉肉

ttbs123 发表于 2009-7-18 14:13:07

长见识了,多谢肉肉

savasun 发表于 2009-8-12 16:40:20

CASE只计算一次值 然后都是test,jmp, if...else是每个条件都要计算一遍的.
不过这种高效率 没什么用 差别也不是很大 LZ应该从你的算法和机器上下手 才能真正提高
总的来说if...else和switch的实现不一样;
编译完后,if...else是一条比较指令;
swtich是一张地址表。

这里扯远一点,如果用switch的话,case里的值最好步进为一,因为汇编会用case的值做表的索引,步进小的话越好处理;一般处理是用枚举来定义case的值,然后再case中引用;
页: [1]
查看完整版本: 请问CASE效率高还是IF效率高