託管堆與堆疊

2021-06-17 17:12:53 字數 1050 閱讀 9535

記憶體格局通常分為四個區

全域性資料區:存放全域性變數,靜態資料,常量

**區:存放所有的程式**

棧區:存放為執行而分配的區域性變數,引數,返回資料,返回位址等,

堆區:即自由儲存區

值型別變數與引用型別變數的記憶體分配模型也不一樣。為了理解清楚這個問題,讀者首

先必須區分兩種不同型別的記憶體區域:執行緒堆疊(thread stack)和託管堆(managed heap)。

每個正在執行的程式都對應著乙個程序(process),在乙個程序內部,可以有乙個或多

個執行緒(thread),每個執行緒都擁有一塊「自留地」,稱為「執行緒堆疊」,大小為1m,用於保

存自身的一些資料,比如函式中定義的區域性變數、函式呼叫時傳送的引數值等,這部分記憶體

區域的分配與**不需要程式設計師干涉。

另一塊記憶體區域稱為「堆(heap)」,在.net 這種託管環境下,堆由clr 進行管理,所

以又稱為「託管堆(managed heap)」。

用new 關鍵字建立的類的物件時,分配給物件的記憶體單元就位於託管堆中。

在程式中我們可以隨意地使用new 關鍵字建立多個物件,因此,託管堆中的記憶體資源

是可以動態申請並使用的,當然用完了必須歸還。

打個比方更易理解:託管堆相當於乙個旅館,其中的房間相當於託管堆中所擁有的記憶體

單元。當程式設計師用new 方法建立物件時,相當於遊客向旅館預訂房間,旅館管理員會先看

一下有沒有合適的空房間,有的話,就可以將此房間提供給遊客住宿。當遊客旅途結束,要

辦理退房手續,房間又可以為其他旅客提供服務了。

從表 1 可以看到,引用型別共有四種:類型別、介面型別、陣列型別和委託型別。

所有引用型別變數所引用的物件,其記憶體都是在託管堆中分配的。

嚴格地說,我們常說的「物件變數」其實是類型別的引用變數。但在實際中人們經常將

引用型別的變數簡稱為「物件變數」,用它來指代所有四種型別的引用變數。

託管堆與堆疊

記憶體格局通常分為四個區 全域性資料區 存放全域性變數,靜態資料,常量 區 存放所有的程式 堆區 即自由儲存區 值型別變數與引用型別變數的記憶體分配模型也不一樣。為了理解清楚這個問題,讀者首 先必須區分兩種不同型別的記憶體區域 執行緒堆疊 thread stack 和託管堆 managed heap...

堆,棧,託管堆

在計算機領域,堆疊是乙個不容忽視的概念,但是很多人甚至是計算機專業的人也沒有明確堆疊其實是兩種資料結構。堆疊都是一種資料項按序排列的資料結構,只能在一端 稱為棧頂 top 對資料項進行插入和刪除。要點 堆 順序隨意 棧 後進先出 last in first out 值型別總是在記憶體中占用乙個預定義...

值型別與引用型別(執行緒堆疊與託管堆)

一 net 將變數的型別分為 值型別 與 引用型別 兩大類。諸如int 和float 之類的變數屬於值型別,而 類 型別的變數則屬於 引用型別 值型別的變數一定義之後就馬上可用。比如定義 int i 之後,變數i 即可使用。引用型別的變數定義之後,還必須用new 關鍵字建立物件後才可以使用。二 值型...