if else 與 三目 的效率比較

2021-08-30 11:31:04 字數 548 閱讀 1515

簡單說一下 if-else 和 三目 的效率 (常數優化)

先放結論:

1.多用三目,少用if-else

2.如果用if,把概率大的放前面

下面是原理:

程式執行時,處理器會通過並行運算而加速執行,當遇到選擇支時則會停下判斷 (例如高速行駛的大卡車遇到了分岔路)

if-else 是先賦值再運算,為了節省時間,分支**會先猜測執行 if 還是 else 並繼續執行 (預設是if),若猜對則因並行運算而節省時間,若猜錯則因消除運算而耗費時間。 (卡車直接衝向一邊康康可不可以走通,如果可以則繼續走,如果不可以則回頭走另一條路)(成本是回到分岔處的時間)

三目 是先運算再賦值,遇到選擇支時停止並行並判斷條件。(在分岔處停下康地圖) (成本是重新加速需要的時間)

在多數情況下,運算結果為0與為1的可能相近,分支**&並行運算 會比三目耗費更多的時間,所以應更多的使用三目。

在一些情況下,運算結果大多為0或大多為1(80+%),這時 分支**&並行運算 的損耗遠小於三目,所以應選擇 if-else

關於分支**,可以參考這些文章:1. 2.

switch與ifelse的效率問題

switch與if.else 的執行的效率問題 今天讀一前輩的程式,發現其在串列埠中斷裡面為了分析協議的報文型別,在中斷函式裡面使用if.else語句。因為報文型別在現在看來只有兩種,以後有可能還會增加,不確定。本人以為這樣用有些不妥,為什麼不用switch語句呢?猜想是不是因為效率方面的考慮呢,畢...

switch與ifelse的效率問題

switch.case與if.else的根本區別在於,switch.case會生成乙個跳轉表來指示實際的case分支的位址,而這個跳轉表的索引號與switch變數的值是相等的。從而,switch.case不用像if.else那樣遍歷條件分支直到命中條件,而只需訪問對應索引號的表項從而到達定位分支的目...

switch與ifelse的效率問題

switch與if.else 的執行的效率問題 今天讀一前輩的程式,發現其在串列埠中斷裡面為了分析協議的報文型別,在中斷函式裡面使用if.else語句。因為報文型別在現在看來只有兩種,以後有可能還會增加,不確定。本人以為這樣用有些不妥,為什麼不用switch語句呢?猜想是不是因為效率方面的考慮呢,畢...