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

.NET 類型系統深度解析(上):CTS 架構、記憶體模型與值/參考型別本質

     編輯:關於.NET

一、通用類型系統(CTS)宏觀架構

.NET 類型系統以 System.Object 為根,分支為值型別與參考型別,結構清晰、符合面向對象自然演化規律(太極生兩儀、兩儀生四象…),具備架構清晰、跨語言通用、錯誤易檢測、擴展性強等優勢。

.NET 類型體系分支圖

二、從源頭說起:Object 基礎成員

所有型別繼承 System.Object(C# 對應 object),共享核心方法:

  • 實例方法:ToString()、Equals()、GetHashCode()、GetType()、MemberwiseClone()(protected 淺拷貝)。
  • 靜態方法:Equals(objA, objB)、ReferenceEquals(objA, objB)。
  • 終結器:Finalize()(GC 回收前呼叫,開銷大,建議改實作 IDisposable)。

語言關鍵字(int、string 等)僅為框架型別(System.Int32、System.String)的別名,編譯前已在 MSIL 轉換,零效能損失。

三、記憶體結構:堆疊與受控堆

32 位元程序擁有 4GB 虛擬位址空間:

  • 堆疊:連續記憶體、高位址向低位址增長、先進後出、大小固定(預設 1MB),存放值型別實例與參考型別的參考(指標)。超出導致 StackOverflow。
  • 受控堆:存放參考型別實際資料,由 GC 管理回收。參考型別在堆疊僅存指向堆的位址。

3.1 值型別:堆疊上的高效公民

值型別(int、struct、enum、decimal 等)直接存放於執行緒堆疊,生命週期嚴格限定於程式碼區塊({ }),離開區塊自動釋放。使用 unsafe 指標可觀察其連續、依型別大小分配的記憶體佈局。

int a = 1;      // 4 bytes
byte b = 2;     // 1 byte
decimal c = 3m; // 16 bytes
bool d = true;  // 1 byte (通常對齊至 4 bytes)

也可用 ref/out 延伸作用域。

3.2 參考型別:雙層儲存機制

new 操作三步驟:

  1. 堆疊分配參考變數空間(存堆上位址)。
  2. 受控堆分配實際物件記憶體。
  3. 呼叫建構函式初始化。

值型別也可用 new(呼叫建構函式),但不在堆上分配。參考型別必須 new 才能在堆上建立實例。

GC 定期掃描堆疊參考,回收不可達物件,解決記憶體洩漏。

總結

理解 CTS 階層、Object 核心契約、堆疊與堆的分工與交互,是掌握 .NET 型別轉換、效能優化、記憶體診斷的基石。

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