首页 >后端开发 >php教程 >PHP:switch-case与if-else两个效率谁更高

PHP:switch-case与if-else两个效率谁更高

黄舟
黄舟原创
2017-06-25 09:54:221861浏览

        早晨在写一个PHP的程序,因为要处理很大的数据量,所以不得不考虑运行时间的问题。然后在计算每项的权值时遇到了问题,在考虑应该用switch-case还是if-else,在网上看了一下,大家都说switch-case的效率要比if-else高的多,自己写了几个程序测试了一下,是这样的,尤其在大量的数据和多个条件下switch-case表现出来的效率要比if-else高很多,其实这也是可以理解的,因为switch-case的比较判断语句很集中,这样cache不会因为不停的进行比较判断分支而发生刷新。但是if-else的比较判断部分则比较分散,每一次比较都要跳到很远的地方,这样每次(几乎每次)都需要刷新cache,理所当然造成速度很慢。

       下面是从编译原理里“偷”来的一点东西:

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两个效率谁更高的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn