寫這個純粹是自己的一點學習總結,其實就學習的筆記整理,相當於對自己的一點督促,如有看到不正確的歡迎指出 一般我們寫代碼都是使用的高級語言,但是在CLR中運行的代碼並不是我們直接寫的代碼,而是通過我們選擇對應語言的編輯器生產的中間語言運行,所以一開始會介紹,在CLR運行之前,到底做了什麼? 所有面向C ...
寫這個純粹是自己的一點學習總結,其實就學習的筆記整理,相當於對自己的一點督促,如有看到不正確的歡迎指出
一般我們寫代碼都是使用的高級語言,但是在CLR中運行的代碼並不是我們直接寫的代碼,而是通過我們選擇對應語言的編輯器生產的中間語言運行,所以一開始會介紹,在CLR運行之前,到底做了什麼?
所有面向CLR的語言都可以在CLR中運行並編譯,例如C#、F#,在代碼在CLR運行之前,則先會選擇對應的編譯器進行編譯,並生產中間語言(IL),所以實際運行的是中間語言,之所以CLR能實現多種語言相容也是因為如此。 註:C++很特殊,可以同時編寫托管代碼和非托管代碼
托管模塊: 在進行對應的語言編譯之後,對生成一個叫托管模塊的一個文件,說白了就是電腦上的一個特殊的文件而已,但是因為有了CLR頭,所以能被CLR識別到,IL則是托管模塊重要的組成元素之一,程式集大致由四個部分組成:
1、PE頭:windows文件的標準
2、CLR頭:標記為可以CLR識別的托管文件
3、元數據:對於代碼中定義類和引用類的描述
4、IL(中間語言):用於CLR中運行的重要代碼
其中元數據是其中重要部分組成,為CLR性能以及編寫時都有幫助:
1、避免重覆編譯
2、編寫代碼時的只能感應
3、類型安全的檢查
4、序列化傳輸
5、GC的幫助
程式集: 介紹完托管模塊後就必須要介紹一下大家比較熟悉的程式集了,程式集是由一個或多個托管模塊和若幹個資源文件組成,但是多出了一個新的文件:清單,清單則是對於托管模塊和資源的一個描述的文件,如果一個程式集只有一個托管模塊則他就是托管模塊本身。
至此,在介紹CLR運行代碼前重要的幾個文件就介紹完畢了,在探究CLR要低如何運行代碼之前,下一節我們先看一下CLR是如何啟動的。