小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

c# 值類(lèi)型和引用類(lèi)型 筆記

 路人甲Java 2020-05-11

參考以下博文,我這里只是筆記一下,原文會(huì)更加詳細(xì)

c#基礎(chǔ)系列1---深入理解值類(lèi)型和引用類(lèi)型

堆棧和托管堆c#

值類(lèi)型和引用類(lèi)型

紅色表示——“這啥?”(真實(shí)1個(gè)問(wèn)題引出3個(gè)問(wèn)題)

CLR支持的兩種類(lèi)型

引用類(lèi)型:
引用類(lèi)型從托管堆上分配,new操作符會(huì)返回對(duì)象的指針——指向?qū)ο髷?shù)據(jù)的內(nèi)存位置的一個(gè)引用,引用類(lèi)型傳遞的是對(duì)象的指針(string特殊)。引用類(lèi)型的變量都需要一次堆內(nèi)存的分配。

值類(lèi)型:

值類(lèi)型一般在線程棧上分配,一個(gè)值類(lèi)型變量包含了其實(shí)例的值,沒(méi)有引用指針。

 

相同點(diǎn):

都是System.Object的子類(lèi)。

值類(lèi)型也可以繼承接口。

不同點(diǎn):

1、 值類(lèi)型分配在堆棧上,引用類(lèi)型在托管堆上分配;

如果一個(gè)引用類(lèi)型的某個(gè)屬性是值類(lèi)型,這個(gè)值類(lèi)型也分配在托管堆上。

2、 所有的值類(lèi)型都是隱式密封的(sealed),不能繼承。

3、 值類(lèi)型的賦值逐字段的復(fù)制,頻繁賦值也會(huì)造成性能上的壓力;引用類(lèi)型的賦值只是指針傳遞。

4、 引用類(lèi)型額外有類(lèi)型對(duì)象指針和同步塊索引。

5、 值類(lèi)型繼承自System.ValueType;引用類(lèi)型繼承自System.Object,System.ValueType也繼承自System.Object。System.ValueType重寫(xiě)了Equals和GetHashCode方法

性能:

值類(lèi)型分配在棧上,在GC控制外,不會(huì)對(duì)GC造成壓力;

引用類(lèi)型分配在堆中,會(huì)影響到GC,每一次到堆的內(nèi)存分配都有可能進(jìn)行一次垃圾收集操作。

裝箱拆箱:

裝箱是將值類(lèi)型轉(zhuǎn)化為引用類(lèi)型,拆箱則是將引用類(lèi)型轉(zhuǎn)化為值類(lèi)型。

裝箱:

1、 在托管堆中分配好了內(nèi)存,分配的內(nèi)存量為值類(lèi)型的各個(gè)字段需要的內(nèi)存量加上托管上對(duì)象的兩個(gè)額外成員(類(lèi)型對(duì)象指針,同步塊索引)需要的內(nèi)存量

2、 值類(lèi)型的字段復(fù)制到新分配的堆內(nèi)存中。

3、 返回對(duì)象的地址,這個(gè)地址就是這個(gè)對(duì)象的引用。

拆箱:

1、 獲取已經(jīng)裝箱的值類(lèi)型實(shí)例的指針。

2、 把獲取到的值復(fù)制到棧。

(拆箱只能還原為原先未裝箱之前的類(lèi)型)

裝箱比較耗費(fèi)性能,還可能引起GC操作

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多