《CLR var C 》讀書筆記 CLR的執行模型

2021-07-07 02:43:07 字數 1897 閱讀 3888

1、使用csc命令操作。

2、所有面向clr的編譯器最終生成的就是乙個託管模組。託管模組是乙個32位/64位的可執行執行體檔案(pe32、pe32+檔案),需要clr才能執行。

託管模組由4部分組成:

第一部分:pe32/pe32+頭。1、檔案格式。其本身的檔案格式決定了其是否可以在64位機器上執行。另外,該頭還包括了gui、cui或dll檔案,及檔案的生成時間等資訊。另外,本部分還包括了本地的cpu的相關資訊。

第三部分:元資料。用於儲存程式資訊。一是本程式(本源**)中的定義的變數和方法等;另一儲存本**中引用的型別和成員。

第四部分:il**。中間語言,不像c語言編譯器,直接將c程式編譯為cpu命令,c#等面向clr的編譯器先把程式變異為il語言,clr再將il語言編譯為cpu命令

3、用csc檔案生成託管模組。用例子說明

具體**如下:

cat類:

using system;

namespace animal}}

dog類:

using system;

namespace animal}}

program類

using system;

using animal;

public class program

}

其輸出結果將是:汪汪

其會在d:\mycode資料夾下生成兩個.netmodule檔案。這個就是託管模組。生成的如下:

通過csc命令,將netmodule檔案生成animal.dll,如圖所示:

此時,程式集應該是:animal.dll+cat.netmodule+dog.netmodule。三者才是程式集。可以這樣理解,animal.dll是乙個目錄,當程式用到netmodule檔案時,程式會到animal.dll中去尋找,類似linq或資料庫的延遲載入,等到用到時才執行,這樣節省了頻寬,降低了網路要求。

通過ide生成的dll則不會出現netmodule檔案,dll包含了cat.netmodule+dog.netmodule,使得誤以為dll就是程式集。

此時資料夾裡的內容如下圖所示:

將引用dll及module生成exe

此時會在資料夾中全部的內容如下:

通過執行,得到理論結果。

4 其他

4.1生成方式

ide通過根據原始檔,直接生成dll,即dll中包含了module檔案。

這樣就可以型別ide生成的dll,避免了生成託管模組。可以直接在程式中使用。

參考文章:

CLR 讀書筆記

clr 讀書筆記 明確幾個問題 1 net framework 如何設計的,相較與com有何重大變化 2 net 語言如何變為il,il 如何儲存,clr怎樣處理它,以及怎樣處理託關與非託管 之間的聯絡 3 為什麼要為assembly配置meta data,clr 怎樣使用它,meta data 怎...

CLR讀書筆記 第一章 CLR的執行模型

參考了jianqiang bao的筆記 1.1 將源 編譯成託管模組 1.生成什麼型別的應用程式或者組建 檔案 1 clr common language runtime 公共語言執行時 可由多種語言使用的執行時 就是乙個執行時環境 什麼是clr.參考 在clr監視下執行的程式屬於 託管的 不在cl...

mysql運維 讀書筆記 Mysql 讀書筆記

mysql儲存時間有兩種型別 datetime和timestamp。分別說一下兩者的區別。datetime,以8位元組儲存時間,理論上可以從0000年儲存到9999年。並且沒有時區的概念,它儲存的就是乙個時間點的概念。timestamp和datetime最主要的不同就是,它是以4個位元組儲存,由19...