堆和棧的含義,值型別和引用型別

2022-09-16 06:54:09 字數 1135 閱讀 3719

☞   堆是無序的,是一片不連續的記憶體域,由使用者自己來控制和釋放,如果使用者自己不釋放的話,當記憶體達到一定的特定值時或程式執行結束時,通過垃圾**器(gc)來**。

☞   是程式執行期間動態分配的記憶體空間,你可以根據程式的運**況確定要分配的堆記憶體的大小。

☞   棧是有順序的,是一片連續的記憶體域,保持著先進後出的原則,由系統自動分配和維護。

☞   是編譯期間就分配好的記憶體空間,因此**中必須就棧的大小有明確的定義。

即, 所分配的記憶體是在一塊連續的記憶體區域內.當我們宣告變數時,那麼編譯器會自動接著當前棧區的結尾來分配記憶體。

引用型別:基類為objcet

值型別:均隱式派生自system.valuetype;

值型別與引用型別表:

☞  值型別變數宣告後,無論是否已經賦值,編譯器都會為其分配記憶體。

☞  引用型別當宣告乙個類時,只會在棧中分配一小塊記憶體用於存放引用位址,此時並沒有為其分配堆上的空間。當類例項化時,分配記憶體空間,並把堆上空間的位址儲存到棧上分配的小塊空間中。

☞  引用型別的物件總是在程序堆中分配(動態分配)。

執行結果

從圖中我們可以看出,兩個引用型別sc1,sc2都指向同乙個託管堆上的空間,所以最後乙個指向的會覆蓋掉前面的。

所以,值型別和引用型別的區別就是:

1、它們儲存的位置不一樣

2、如果是引用型別,當兩個物件指向同乙個地方,修改某乙個的時候,其它物件的值會發生改變

值型別和引用型別,棧和堆的含義

c#詳解值型別和引用型別區別

值型別和引用型別,棧和堆的含義

原文出自 本文主要是討論棧和堆的含義,也就是討論 c 的兩種類據型別 值型別和引用型別 雖然我們在.net中的框架類庫中,大多是引用型別,但是我們程式設計師用得最多的還是值型別。引用型別如 string,object,class等總是在從託管堆上分配的,c 中new操作符返回物件的記憶體位址 也就是...

值型別和引用型別,棧和堆的含義

本文主要是討論棧和堆的含義,也就是討論 c 的兩種類據型別 值型別和引用型別 雖然我們在.net中的框架類庫中,大多是引用型別,但是我們程式設計師用得最多的還是值型別。引用型別如 string,object,class等總是在從託管堆上分配的,c 中new操作符返回物件的記憶體位址 也就是指向物件資...

值型別和引用型別,棧和堆的含義

本文主要是討論棧和堆的含義,也就是討論 c 的兩種類據型別 值型別和引用型別 雖然我們在.net中的框架類庫中,大多是引用型別,但是我們程式設計師用得最多的還是值型別。引用型別如 string,object,class等總是在從託管堆上分配的,c 中new操作符返回物件的記憶體位址 也就是指向物件資...