午前中は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 サイトの他の関連記事を参照してください。