Chinaunix首页 | 论坛 | 博客
  • 博客访问: 509919
  • 博文数量: 61
  • 博客积分: 10352
  • 博客等级: 上将
  • 技术积分: 2840
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-10 14:43
文章分类

全部博文(61)

文章存档

2009年(2)

2008年(59)

我的朋友

分类: C/C++

2008-03-16 01:37:15

理解switch的内部实现
中说到了if-else 与 switch 的效率问题,先看if-else
 

/*与上文(switch)中相同语义*/

int if_else(int x)
{
    int result = x;

    
    if( x == 1 )
         result += 2;

    else if ( x == 100 )
    result *= 13;

    else if ( x == 102 )
    result += 21;

    else if ( x == 103 )
    result += 11;

    else if ( x == 104 || x == 106 )
    result *= result;
    else
    result = 0;
   

    return result;
}



if_else:
    pushl    %ebp
    movl    $3, %eax
    movl    %esp, %ebp
    movl    8(%ebp), %edx
    cmpl    $1, %edx
    je    .L4
    cmpl    $100, %edx
    movw    $1300, %ax
    je    .L4
    cmpl    $102, %edx
    movw    $123, %ax
    je    .L4
    cmpl    $103, %edx
    movb    $114, %al
    je    .L4
    cmpl    $104, %edx
    je    .L11
    xorb    %al, %al
    cmpl    $106, %edx
    je    .L11
.L4:
    popl    %ebp
    .p2align 4,,4
    ret
    .p2align 4,,7
.L11:
    movl    %edx, %eax
    imull    %edx, %eax
    popl    %ebp
    .p2align 4,,2
    ret


可以看到if-else只是单纯地一个接一个比较,效率比较低

可以看出,switch的效率一般比if-else高
阅读(1043) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~