switch 與 if else 效率分析與總結

2021-06-20 19:27:44 字數 811 閱讀 1355

本文是對網上一些討論switch 與 if else 效能的參考資料的總結。

[1] if elseif 和switch那個執行效率高?

[2]從彙編的角度分析c語言(六)switch和if else效率分析 

[3]switch與ifelse的效率問題 

[4]switch為什麼比if else效率高????? 

[5] if和switch效率的再研究

總結:1.基本上大家都認同swich的效率要比if else高。

從組合語言分析,跳表技術,書籍參考《c++高效程式設計:記憶體與效能優化》第7章基本程式設計語句之7.1.4選擇語句的效能比較 等等,多角度證明了該問題:switch效率高。

2.switch的優缺點

缺點:不夠靈活,switch僅支援 int,char,unsigned char 等基本型別;**空間大。

優點:**結構清晰,效率高

3.if else的優缺點

缺點:效率低(相對於switch)

優點:使用靈活,**空間小

其實if else作為關鍵字,本身的效率還是很高的。在使用的時候要考慮具體的需求,不必過分糾結與他們的效能差別。

下面是乙個比較權威的說法:

《c++ footprint and performance optimization》的7章,第一節。

然後根據大量的實際程式測試(不考慮不同的編譯器優化程度差異,假設都是最好的優化),那麼switch語句擊中第三個選項的時間跟if/else if語句擊中第三個選項的時間相同。

擊中第一,第二選項的速度if語句快,擊中第四以及第四之後的選項的速度switch語句快。

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語句呢?猜想是不是因為效率方面的考慮呢,畢...