1..NET語言的編譯器接受源代碼文件,並生成名為程序集的輸出文件。
- 程序集要么是可執行的,要么是DLL
- 程序集里的代碼並不是本機代碼,而是一種名稱為CIL的中間語言
- 程序集包含如下信息:
- 程序的CIL
- 程序中使用的類型的元數據
- 對其他程序集引用的元數據
2. 程序的編譯過程
程序的CIL直到它被調用運行時才會被編譯成本機代碼。在運行時,CLR執行下面步驟:
- 檢查程序集的安全特性
- 在內存中分配空間
- 把程序集中的可執行代碼發送給實時編譯器(JIT),把其中的一部分編譯成本機代碼。
程序集中的可執行代碼只在需要的時候由JIT編譯器進行編譯,然后它就被緩存起來以備在后來的程序中執行。這就意味着不被調用的代碼不會被編譯成本機代碼,而且被調用的代碼只被執行一次。
一旦CIL被編譯成本機代碼,CLR就在它運行時管理它,執行像內存釋放、數組邊界檢查、檢查參數類型、異常管理等任務。有兩個重要的術語由此而生。
- 托管代碼:為.NET框架編寫的代碼稱為托管代碼,需要CLR
- 非托管代碼:不在CLR控制下運行的代碼,比如Win32 C/C++ DLL,稱為非托管代碼