首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET 4.0 體系架構全景:CLR、CTS、CLS、IL、FCL/BCL、JIT/NGEN 與 DLR

     編輯:關於.NET

從安全視角切入,系統性梳理 .NET 4.0 執行環境核心支柱,釐清各層職責與交互關係。

1. CLR (Common Language Runtime) — 托管執行引擎

  • 載入/執行托管代碼、安全性檢查、垃圾回收、例外處理、執行緒管理
  • 要求編譯器產出**中繼資料**描述型別/成員/參考
  • 中繼資料內嵌於 PE 檔,CLR 据此:定位型別、配置實例、解析呼叫、產生原生碼、強制安全、建立執行上下文邊界
  • 自動物件佈局與生命週期管理 (GC) → **托管資料**
  • 跨語言整合:共用型別系統 (CTS) + 共用語言規範 (CLS)
  • 版本綁定與部署:中繼資料內含相依組件版本,免登錄表,降低 DLL Hell

2. CTS (Common Type System) — 型別統一基石

CTS 基本結構圖

圖 1 CTS 型別階層:所有型別繼承自 System.Object

兩大分類

分類儲存位置包含型別
實值型別堆疊簡單型別、結構、列舉
參考型別受控堆積類別、介面、陣列、委派、裝箱實值型別

裝箱/拆箱

int i = 10;
object obj = i;        // 裝箱:實值型別 → 參考型別 (堆積配置)
int j = (int)obj;      // 拆箱:參考型別 → 實值型別

IL 碼對應:box / unbox.any 指令。

3. CLS (Common Language Specification) — 跨語言互通契約

CTS 與 CLS 關係圖

圖 2 CTS ⊃ CLS:CLS 是所有語言必須支援的最小特性集

  • 定義 CTS 子集,確保公開 API 僅使用所有語言共同支援特性
  • [assembly: CLSCompliant(true)] 指示編譯器檢查違規
  • 違規範例:public UInt32 回傳值、僅大小寫不同的公開成員 (Abc/abc)
  • 私有成員不受 CLS 限制

4. IL (Intermediate Language) — 中繼語言

  • 堆疊式指令集,JIT 編譯為原生碼
  • . 開頭為指示詞 (如 .method、.maxstack),其餘為操作碼
  • 驗證過程確保**型別安全**:僅存取授權記憶體、呼叫合法方法

5. FCL / BCL — 類別庫層次

層級範圍代表命名空間
BCL (基礎類別庫)核心型別、集合、IO、反射、安全、執行緒System、System.Collections、System.IO
FCL (架構類別庫)BCL + ASP.NET、ADO.NET、WinForms、WPF、WCF、WF 等應用框架System.Web、System.Data、System.Windows

6. JIT / NGEN — 編譯策略

模式時機優點缺點
JIT (Just-In-Time)方法首次呼叫時啟動快、僅編譯用到的碼、可針對當前 CPU 優化首次呼叫有延遲
NGEN (預編譯)安裝/部署時無 JIT 延遲、共用原生映像跨進程部署複雜、無法針對運行 CPU 微調、需管理原生映像快取

7. DLR (Dynamic Language Runtime) — 動態語言支援

  • 建構於 CLR 之上,提供動態型別、動態方法呼叫、Expression Tree 等服務
  • 支援 IronPython、IronRuby、C# dynamic 關鍵字
  • 核心組件:System.Dynamic、Microsoft.Scripting

安全啟示:CLR 以中繼資料驅動的型別安全、代碼存取安全性 (CAS)、應用程式域隔離,構成 .NET 安全防禦的三道防線。


作者:玄魂
出處:https://www.cnblogs.com/xuanhun/

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved