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

來源:互聯網
上載者:User
早晨在寫一個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!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.