淺談case-switch和if-else

if-else

條件分支(conditional branch)指令先比較兩個值,根據比較的結果決定是否從一個新地址開始執行指令序列。在if語句結尾部分稱爲無條件分支(unconditional branch)指令。

case-switch

將多個指令序列的分支地址編碼爲一張表,即跳轉表(jump table)。程序只要索引該表即可跳轉到恰當的指令序列。程序需要跳轉時,首先將跳轉表中適當的項加載到寄存器中,然後使用寄存器中的地址值進行跳轉。

跳轉表是一個由代碼中的標籤所對應的地址建立而成的數組(包含不同指令序列的表)。

無論你給的case值是多少,都必須找到最大最小值,如果ta超出該範圍,則進入default,然後爲該範圍內的值設置表。

當case的值爲最小值時,會進行偏置處理:

無論你的最小值是多少,都會通過增加偏置值(加上或減去某個數)的方式變成0,以避免出現負數索引。

當只有case 0和case 100000時,會變成if-else代碼:

實際上會建立一個if-else樹(二叉搜索樹),複雜度就變成了 O(logn)O(logn)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章