switch的优化

一个switch的汇编语句如下: int i= 0; 0040B768 mov dword ptr [ebp-4],0 9: switch ( i ) { 0040B76F mov eax,dword ptr [ebp-4] 0040B772 mov dword ptr [ebp-8],eax 0040B775 cmp dword ptr [ebp-8],0 0040B779 je main+33h (0040b783) 0040B77B cmp dword ptr [ebp-8],1 0040B77F je main+3Eh (0040b78e) 0040B781 jmp main+47h (0040b797) 10: case 0: 11: i++; 0040B783 mov ecx,dword ptr [ebp-4] 0040B786 add ecx,1 0040B789 mov dword ptr [ebp-4],ecx 12: break; 0040B78C jmp main+47h (0040b797) 13: case 1: 14: i--; 0040B78E mov edx,dword ptr [ebp-4] 0040B791 sub edx,1 0040B794 mov dword ptr [ebp-4],edx 15: break; 16: default: 17: break; 18: } 最简单的优化方法是将可能性越大的判断越往前面放。 如果每个case中有大量的工作要做,我们可以选择另外一种方式,是用一个查询表,将每个case中执行的语句写到一个函数,然后根据查询表来选择执行的函数。例: enum type {A, B, C} switch ( getType() ) { case A: ..... case B: ..... case C: ..... default: .... } 可以优化为: int procA(...); int procB(...); int procC(...); /* 建立函数查询表 */ int (*pFunc[])(...) = { procA, procB, procC }; /* 根据查询结果执行相关函数 */ pFunc[ getType() ](...);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值