时间:2021-07-01 10:21:17 帮助过:4人阅读
下面是从编译原理里“偷”来的一点东西:
- switch(val){
- case 1:...;break;
- case 2:...;break;
- case 4:...;break;
- case 6:...;break;
- case 7:...;break;
- default:...;
- }
- 对应的汇编是
- addr_tab:
- dd def_addr
- dd addr1
- dd addr2
- dd def_addr
- dd addr4
- dd def_addr
- dd addr6
- dd addr7
- cmp val,7
- ja def_addr
- jmp dword ptr [eax*4+addr_tab]
- addr1:
- ....
- addr2:
- ....
- addr4:
- ....
- addr6:
- ....
- addr7:
- ....
- def_addr:
- ....
switch比较if具有速度优势,一个是采取转移地址列表的方法;还有就是switch一般在松散的情况下也多不采取"比较-转移 "的方法,而是用dec(sub)-jz的指令对,后者不仅是指令的长度变短了,速度上也有优势。
关于程序的测试就不贴上来了,应该感兴趣的都会自己去测试的,OK,决定用switch-case!
以上就是PHP:switch-case与if-else两个效率谁更高的详细内容,更多请关注Gxl网其它相关文章!