C#在.NET編譯執行過程


1..NET語言的編譯器接受源代碼文件,並生成名為程序集的輸出文件。

 

  • 程序集要么是可執行的,要么是DLL
  • 程序集里的代碼並不是本機代碼,而是一種名稱為CIL的中間語言
  • 程序集包含如下信息:
    • 程序的CIL
    • 程序中使用的類型的元數據
    • 對其他程序集引用的元數據

2.   程序的編譯過程

   程序的CIL直到它被調用運行時才會被編譯成本機代碼。在運行時,CLR執行下面步驟:

    • 檢查程序集的安全特性
    • 在內存中分配空間
    • 把程序集中的可執行代碼發送給實時編譯器(JIT),把其中的一部分編譯成本機代碼。

程序集中的可執行代碼只在需要的時候由JIT編譯器進行編譯,然后它就被緩存起來以備在后來的程序中執行。這就意味着不被調用的代碼不會被編譯成本機代碼,而且被調用的代碼只被執行一次。

一旦CIL被編譯成本機代碼,CLR就在它運行時管理它,執行像內存釋放、數組邊界檢查、檢查參數類型、異常管理等任務。有兩個重要的術語由此而生。

    • 托管代碼:為.NET框架編寫的代碼稱為托管代碼,需要CLR
    • 非托管代碼:不在CLR控制下運行的代碼,比如Win32 C/C++ DLL,稱為非托管代碼

3.編譯和執行過程圖

QQ圖片20140322124557


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM