[轉載]C#堆棧講解
阿新 • • 發佈:2017-11-16
數組 托管 修飾 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#堆棧講解