乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      c# 值類型和引用類型 筆記

       路人甲Java 2020-05-11

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

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

      堆棧和托管堆c#

      值類型和引用類型

      紅色表示——“這啥?”(真實1個問題引出3個問題)

      CLR支持的兩種類型

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

      值類型:

      值類型一般在線程棧上分配,一個值類型變量包含了其實例的值,沒有引用指針。

       

      相同點:

      都是System.Object的子類。

      值類型也可以繼承接口。

      不同點:

      1、 值類型分配在堆棧上,引用類型在托管堆上分配;

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

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

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

      4、 引用類型額外有類型對象指針和同步塊索引。

      5、 值類型繼承自System.ValueType;引用類型繼承自System.Object,System.ValueType也繼承自System.Object。System.ValueType重寫了Equals和GetHashCode方法

      性能:

      值類型分配在棧上,在GC控制外,不會對GC造成壓力;

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

      裝箱拆箱:

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

      裝箱:

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

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

      3、 返回對象的地址,這個地址就是這個對象的引用。

      拆箱:

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

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

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

      裝箱比較耗費性能,還可能引起GC操作

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多