簡體   English   中英

Switch語句的工作原理

[英]How Switch Statement Works

switch語句如何立即下降到內存中的正確位置? 對於嵌套的if語句,它必須與每個語句進行比較,但是使用switch語句它會直接轉到正確的大小寫。 這是如何實現的?

switch語句編譯為機器代碼有許多不同的方法。 以下是一些:

  • 編譯器可以生成一系列測試,這些測試效率不高,因為只有log 2 (N)測試足以在N個可能的情況中調度值。

  • 編譯器可以生成一個值表和跳轉地址,然后由通用查找代碼(線性或二分法,類似於bsearch() )使用,最后跳轉到相應的位置。

  • 如果案例值足夠密集,編譯器可以生成跳轉地址表和代碼,用於檢查開關值是否在包含所有案例值的范圍內並直接跳轉到相應的地址。 這可能是最接近您的描述的實現: 但是使用switch語句,它直接轉到正確的大小寫

根據目標CPU的特定能力,編譯器設置以及案例值的數量和分布,編譯器可能使用上述方法之一或其他方法,或它們的組合,甚至一些其他方法。

編譯器設計人員花費了大量精力來嘗試改進這些選擇的啟發式方法。 查看匯編輸出或使用Godbolt的Compiler Explorer等在線工具查看各種代碼生成的可能性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM