天天看點

switch...case 與 if...else 的性能分析

switch...case 與 if...else的根本差別在于,switch...case 會生成一個跳轉表來訓示實際的 case 分支的位址,而這個跳轉表的索引号與 switch 變量的值是相等的。進而,switch...case 不用像 if...else 那樣周遊條件分支直到命中條件,而隻需通路對應索引号的表項進而到達定位分支的目的。

1.當分支較多時,當時用 switch 的效率是很高的。因為 switch 是随機通路的,就是确定了選擇值之後直接跳轉到那個特定的分支,但是 if else 是周遊是以得可能值,知道找到符合條件的分支。如此看來,switch 的效率确實比 if else 要高的多。

2.由上面的彙編代碼可知道,switch...case 占用較多的代碼空間,因為它要生成跳表,特别是當 case 常量分布範圍很大但實際有效值又比較少的情況,switch...case 的空間使用率将變得很低。

3.switch...case 隻能處理 case 為常量的情況,對非常量的情況是無能為力的。例如 if (a > 1 && a < 100),是無法使用 switch...case 來處理的。是以,switch 隻能是在常量選擇分支時比 if else 效率高,但是 if else 能應用于更多的場合,if else 比較靈活。

參考:https://zhuanlan.zhihu.com/p/149090160

繼續閱讀