ホームページ  >  記事  >  バックエンド開発  >  PHP: switch-case と if-else ではどちらが効率的ですか?

PHP: switch-case と if-else ではどちらが効率的ですか?

黄舟
黄舟オリジナル
2017-06-25 09:54:221794ブラウズ

午前中はPHPプログラムを書いていました。大量のデータを処理する必要があるため、実行時間を考慮する必要がありました。次に、各アイテムの重みを計算するときに問題が発生しました。switch-case を使用するか if-else を使用するかを検討していました。ネットで調べたところ、if-else よりも switch-case の方が効率的であるとのことです。実際、switch -case は、実際に、switch -case よりもはるかに効率的です。比較判定文が非常に集中しているため、分岐の絶え間ない比較と判定によりキャッシュが更新されません。ただし、if-elseの比較・判定部分は比較的分散しているため、毎回(ほぼ毎回)キャッシュを更新する必要があり、当然速度は非常に遅くなります。 。

以下はコンパイル原則から「盗まれた」ものです:

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: 
                  ....

1 つは、アドレスを転送する方法を使用することです。 switch は通常、ルーズな状況では「比較シフト」方式を採用せず、dec(sub)-jz 命令ペアを使用するという事実があります。後者は命令の長さを短縮するだけでなく、スピードの面で有利。

プログラムのテストは載せませんので、興味のある方はご自身でテストしてみてください。

以上がPHP: switch-case と if-else ではどちらが効率的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。