【2018.04.27 C與C++基礎】關於switch-case及if-else的效率問題


對於這個問題自己是比較清楚的,在分支比較多時,switch-case的效率肯定比if-else的要高許多,其原理類似於我們在優化某些程序時使用查表來代替算法計算一樣。

如果想進一步深究的話,可以查看GCC編譯之后的匯編代碼。

這里有兩篇Blog可以參考一下,致謝兩位作者。

1. switch與ifelse的效率問題

https://blog.csdn.net/kehui123/article/details/5298337

2. if else和switch的效率

https://blog.csdn.net/spy19881201/article/details/5851792

先記錄下這兩篇博文中的結論:

1. switch和if-else相比,由於使用了BinaryTree算法,絕大部分情況下switch會快一點,除非是if-else的第一個條件就為true.

2. 編譯器編譯switch與編譯if...else...不同,對switch-case會生成一個跳表,不管有多少case,都直接跳轉,不需要逐個比較查詢,注意這一部分內容其實在深入理解計算機系統這本書上有提及的。

3. 由於swtich-case在編譯處理時要生成跳表,會占用較多的代碼空間,當case常量分布范圍較大但實際的有效值又比較少的時候,switch-case的空間利用率會降低。

4.  switch-case僅限於處理分支條件結果為常量的情況,對於較復雜的條件需要多做程序上的處理,在靈活性上不如if-else。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM