switch的优化

来源:互联网 发布:mysql ubunty 编辑:程序博客网 时间:2024/05/23 09:57
一个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() ](...);
原创粉丝点击