簡體   English   中英

C#編譯器和JIT都做了哪些優化?

[英]What kind of optimizations do both the C# compiler and the JIT do?

我繼續在我的編譯器類的C#編譯器上工作。 目前我已經完成了教科書中關於編譯器優化的章節。

在大多數情況下,我的教科書在編寫時沒有考慮到及時編譯,我對C#編譯器執行的靜態,預jit優化的種類與JIT過程中的執行情況感到好奇?

當我與人們談論有關CLR的編譯時,我通常會聽到類似的事情,“大多數優化都是由JIT完成的”。

是循環展開,常量折疊/傳播,C#編譯器在Jit之前完成指令交織還是由抖動處理? 如果它們不是由抖動處理的,那么抖動對於即時編譯器所做的那種優化是什么?

我可以想象有一些JIT獨有的優化; 具體來說,任何依賴於應用程序運行的環境/上下文的優化。(注意,以下所有都是假設的,我不確定,實際執行了哪些或者其中任何一個)

最無聊:JIT可以根據32位/ 64位底層操作系統進行優化,甚至可能取決於確切的處理器架構。

不適用: 更有趣:當應用程序未在調試上下文中運行時,JIT可以優化僅在調試模式下運行的任何內容(例如某些條件代碼)。

最有趣的是:JIT可以在僅依賴於readonly字段的類中優化條件分支,因為至少理論上該值在類的執行期間永遠不會改變。

基本上我認為推遲優化直到JIT通常是要走的路,因為在JIT時間,關於代碼實際運行的上下文的信息最多,使得更有意義的優化成為可能。

David Notario在他的博客上有一些帖子(你可以從這里開始 ,然后走歷史),但它們相當粗略。

我不認為C#編譯器會進行任何優化。 JIT完成所有工作。

暫無
暫無

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

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