CLR Via C 學習筆記之CLR的執行模型

2021-09-06 10:55:46 字數 1208 閱讀 4098

1:公共語言執行時(common language runtime,clr)是乙個可由多種程式語言使用的「執行時」。clr的核心功能(比如記憶體管理、程式集載入、安全性、異常處理和執行緒同步)可由面向clr的所有語言使用;

2:c#源**檔案---》c#編譯器---》託管模組(中間語言il和元資料);無論選用哪個編譯器,結果都是乙個託管模組;託管模組是乙個標準的32位可移植執行體(pe32)檔案,或者是乙個標準的64位windows可移植執行體(pe32+)檔案,它們都需要clr才能執行;

3:託管模組各個組成部分:(1)pe32或pe32+頭;pe32檔案頭能在32位或64位版本上執行,pe32+檔案頭只能在64位版本上執行; (2)clr頭;包含使這個模組成為乙個託管模組的資訊(比如clr版本,一些標誌flag,託管模組入口方法main方法的methoddef元資料標記等);(3)元資料;每個託管模組都包含元資料表,主要有兩種型別的表,一種是型別的表描述源**中定義的型別和成員,另一種描述源**引用的型別和成員;(4)il中間語言**;編譯器編譯源**生成的**,執行時clr將il編譯成本地cpu指令;

4:clr目前作為.net framework的一部份提供

5:要知道是否已安裝.net framework,只需檢查%systemroot%\system32目錄中的mscoree.dll檔案,存在檔案表明已安裝;檢視安裝哪些版本的.net framework檢查登錄檔(regedit)項的子項:key_local_machine\software\microsoft\net framework setup\ndp

6:il轉化成本地cpu指令:第一次:exe/dll--》jitcompiler--》編譯成本地cpu指令--》儲存到乙個動態分配的記憶體塊中  以後:直接執行記憶體塊中的**,完全跳過jitcompiler函式 (乙個方法只有在首次呼叫時才會造厲一些效能損失。以後所呼叫都以本地**的形式全速執行,無需重新驗證il並把它編譯成本地**,但若應用程式終止,編譯好的**也會被丟棄,jit編譯器必須再次將il編譯成本地指令);

8:ngen.exe可以將應用程式的所有程式集(或者那個指定的程式集)的il**會編譯成本地**;

9:平台選擇性不同:

10:修飾符範圍

CLR VIA C 學習筆記(1)

c 被編譯器拿去編譯生成il,32位的生成pe32 header,64位 生成pe32 header.還有clr header metadata il。pe32 pe32 header 包含目標平台是64還是32位系統,檔案型別 gui,cui,dll clr header clr 版本,模組大小,...

CLR via C 學習筆記 型別

類的記憶體分配 關鍵字 abstract 類 該類不能構建例項 方法 屬性 事件 表示構建派生型別的例項之前派生型別必須重寫並實現這個成員 常量 字段 不允許 virtual 類 不允許 方法 屬性 事件 表示這個成員可以由派生類重寫 常量 字段 不允許 override 類 不允許 方法 屬性 事...

《CLR via C 》讀書筆記 之 方法

2013 02 27 8.1 例項構造器和類 引用型別 8.2 例項構造器和結構 值型別 8.3 型別構造器 8.6 擴充套件方法返回 建立引用型別的例項的過程 1 為例項的資料字段分配記憶體 例項字段包括本身及其基類的例項字段 2 然後初始化物件的附加字段 型別物件指標和同步塊索引 3 呼叫型別的...