首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

從 C++ 堆疊與堆理解 C# 值類型與參考類型的本質差異

     編輯:VC 教學

C++ 的記憶體管理雙元論

C++ 無值/參考類型之分,但理解堆疊與堆兩大記憶體區域,即可洞悉 C# 類型系統的設計邏輯。

堆疊

  • 先進後出,大小固定(通常 ~2MB)
  • 區域變數、參數自動分配/釋放,生命週期隨作用域結束
  • 存取極快,但空間有限,不宜放置大型物件

堆

  • 空間大,受虛擬記憶體限制
  • 程式設計師手動 new/delete 控制生命週期
  • 靈活但風險高:記憶體洩漏、重複釋放、懸空指標

代碼演示:堆疊 vs 堆上的物件

#include <iostream>
using namespace std;

class Human {
public:
    void Talk() { cout << "Hello" << endl; }
    ~Human() { cout << "析構函數在工作..." << endl; }
private:
    int age;
};

int main() {
    Human h;                 // 堆疊物件
    cout << "h 大小: " << sizeof(h) << endl;
    cout << "h 位址: " << &h << endl;
    h.Talk();

    Human *p = new Human();  // 堆物件
    cout << "p 大小: " << sizeof(p) << endl; // 指標大小
    cout << "p 位址: " << p << endl;
    p->Talk();
    delete p;                // 必須手動釋放
    // p 位址仍存在,但指向記憶體已無效
    // 建議 delete 後 p = nullptr;
    return 0;
}

對應 C# 類型系統

C++ 概念C# 對應
堆疊上的值型別值類型
堆上的參考型別參考類型
自動銷毀值類型離開作用域即銷毀
手動管理/GC參考類型由垃圾回收器管理

C# 將簡單型別、結構體定為值類型(隱含堆疊語義),類別定為參考類型(隱含堆語義),並引入 GC 解決手動管理風險,這正是從 C++ 經驗演進而來的設計決策。

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