1. 程式人生 > >[轉載]C#堆棧講解

[轉載]C#堆棧講解

數組 托管 修飾 body 引用類型 har padding 堆棧 lang

1:棧就是堆棧,因為堆和堆棧這樣說太拗口了,搞得像繞口令,所以有些時候就把堆棧簡稱為棧。堆和棧,你看這又多舒服。但無論什麽時候,堆棧都不等於堆和棧,必須說,堆和棧或者堆和堆棧

2:值類型變量和引用類型變量是保存在棧裏面的。而值類型變量保存值類型實例的值,引用類型變量保存引用類型實例的引用。 對象的引用是保存的指向堆中的地址的指針,堆中保存的才是對象實例

3平時一個對象本身就包含有值類型和對象的實例,這就要分清字段和變量的概念。一般來說可以這樣講,在類裏面聲明的,是字段,在方法裏面聲明的,是變量。字段有訪問修飾符(public/private/protected/internal),變量沒有。

4變量和字段的區別,字段和變量雖然用起來差不多,但實際上有很大的區別。變量永遠是儲存在棧裏面的,字段跟隨類的實例走。

5:棧是一種滿足後進先出的表;堆是一種滿足父節點總不大於(或不小於)子節點的樹。不是一個對象實例就是一個堆(對象的成員就是一個節點),而是所有的對象實例是一個堆(一個對象只是堆中的節點)。

值類型:

int

Float

Char

double

結構

………...

引用類型:

接口

數組

字符串

1:值類型的數據存儲在內存的堆棧中,從堆棧中可以快速訪問這些數據,因此值類型表示實際的數據。

2:引用類型表示指向存儲在內存堆中的數據的指針或引用。

3:數據釋放時,值類型數據是自動釋放,而引用類型的數據需要垃圾回收器來收回。

4:值類型的默認值是:0,引用類型的默認值是:null

對於值類型的類,類的實例儲存在變量裏面,也就是類的實例跟隨變量儲存在棧上。

對於引用類型的類,類的實例儲存在托管堆上。

轉自:https://www.cnblogs.com/xiatianoo/p/4840819.html

[轉載]C#堆棧講解