值類型,除了最終繼承自Object,還繼承自ValueTypec#
值類型繼承ValueType,ValueType繼承Object。(c#中全部的類型都最終繼承自Object)指針
建立引用類型時,runtime會爲其分配兩個空間,一塊空間分配在堆上,存儲引用類型自己的數據,另外一個塊空間分配在棧上,存儲對堆上數據的引用(實際上存儲的堆上的內存地址,也就是指針)。對象
建立值類型時, runtime會爲其分配一個空間,這個空間分配在變量建立的地方,如:繼承
若是值類型是在方法內部建立,則跟隨方法入棧,分配到棧上存儲。內存
若是值類型是引用類型的成員變量,則跟隨引用類型,存儲在堆上。string
值類型的數據存儲在內存的棧中;引用類型的數據存儲在內存的堆中,而內存單元中只存放堆中對象的變量
值類型存取速度快,引用類型存取速度慢。引用
值類型表示實際數據,引用類型表示指向存儲在內存堆中的數據的指針或引用方法
棧的內存分配是自動釋放;而堆在.NET中會有GC來釋放 im
值類型變量直接把變量的值保存在堆棧中,引用類型的變量把實際數據的地址保存在堆棧中,而實際數據則保存在堆中
如:int是值類型,string是引用類型,引用類型指向的是堆中的位置