1. 程式人生 > >編譯器對switch,case 的優化

編譯器對switch,case 的優化

.swtich(4分支以上)所形成的跳轉表是在編譯過程中實現的,使得其效率高於if..else語句。

在編譯過程中程式生成了一個數組,陣列中儲存的是要跳轉到某case中的地址,預設的都以deflaut或者switch結尾的地址代替。執行過程中,先判斷該值有沒有超出範圍,否則直接跳出,然後再類似陣列中隨機訪問直接跳轉到某case語句進行執行,無需再進行其他比較。

(1)如果之間case後的數值之間跨度很大,是否要從頭至尾生成,此很費空間。跳轉表何時形成?在哪裡儲存,資料段?編譯時形成,儲存資料段,這樣則會在裝載時直接將其裝入,然後進行讀取。

(2)該表是在編譯過程中生成的,在程式執行過程中,先進行比較,然後進行跳轉,直接跳轉的原因是形成的陣列,而輸入的整型資料剛好對應於其下標,將下標乘以size直接跳轉至目標進行運算。

case語句的數目及case後的整型資料之間的跨度使得對其進行優化的方案不同。

case語句的整型數值跨度大難已形成跳轉表。

case語句中的整型如果跨度不大於六且四分之以上的,形成跳轉表。