PHP:switch-case與if-else兩個效率誰比較高

黄舟
發布: 2023-03-11 11:22:02
原創
1791 人瀏覽過

        早晨在寫一個#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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!