我有一個帶有一些亂數的開關:1,5,16...
想象一下其中有 10 或 20 個。
在它們之后,我有一些宏,我可以在其中分配我自己的有符號整數。所以它們可以是 1000 或 32000……
想象一下其中也有 10 或 20 個。
現在,我的問題是:
- 如果前一個數字是有序的但不是連續的,那么排序和使我的數字連續甚至有助于優化嗎?
- 使用較小的數字(例如 1000,與 32000 相比)會以任何理論上的方式影響性能嗎?
代碼:
switch (x) {
case 1:
// stuff
break;
case 5:
// stuff
break;
case 16:
// stuff
break;
case 32000:
// stuff
break;
case 32001:
// stuff
break;
case 32002:
// stuff
break;
defult:
break;
}
如果您需要硬體細節,想象我們在談論最默認的理論場景:gcc、intel,沒有優化。
請指教。
uj5u.com熱心網友回復:
這取決于您的編譯器,通常它應該無濟于事。一些編譯器可能實作二進制搜索,其他編譯器可能實作 if/else 鏈。但只要不是所有數字都是連續的,就不會有跳表*。您的案例陳述的順序沒有區別。
switch (x) {
case 1:
...
break;
case 3:
...
break;
case 5:
...
break;
}
和
switch (x) {
case 1:
...
break;
case 5:
...
break;
case 3:
...
break;
}
將(通常)編譯為完全相同的代碼。
編輯:
如果大于 的型別x可以處理的數字,則結果未定義。否則它沒有任何區別。
*有時它可能是值得的,例如,如果數字之間只有差距。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/523658.html
標籤:C
