最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#棧和堆的區(qū)別淺談

 更新時間:2013年02月19日 14:42:13   作者:  
理解堆與棧對于理解.NET中的內(nèi)存管理、垃圾回收、錯誤和異常、調(diào)試與日志有很大的幫助

理解堆與棧對于理解.NET中的內(nèi)存管理、垃圾回收、錯誤和異常、調(diào)試與日志有很大的幫助。垃圾回收的機(jī)制使程序員從復(fù)雜的內(nèi)存管理中解脫出來,雖然絕大多數(shù)的C#程序并不需要程序員手動管理內(nèi)存,但這并不代表程序員就無需了解分配的對象是如何被回收的,在一些特殊的場合仍需要程序員手動進(jìn)行內(nèi)存管理。

在32位的處理器上,每個進(jìn)程的虛擬內(nèi)存為4GB,.NET會在這4GB的內(nèi)存塊中開辟出3塊內(nèi)存,分別作為棧、托管堆、和非托管堆

堆(heap):

堆是從下往上分配,所以已用的空間在自由空間下面,C#中所有引用類型的對象分配在托管堆上,托管堆在內(nèi)存上是連續(xù)分配的,并且內(nèi)存對象的釋放受垃圾收集機(jī)制的管理,效率相對于棧來說要低的多。

棧(stack):

棧是自上向下進(jìn)行填充,即由高內(nèi)存地址指向低內(nèi)存地址,并且內(nèi)存分配是連續(xù)的,C#中所有的值類型和引用類型的引用都分配在棧上,棧根據(jù)后進(jìn)先出的原則,依次對分配和釋放內(nèi)存對象。

對象內(nèi)存的分配與銷毀:

當(dāng)一個類的實例對象創(chuàng)建的時候,這個對象的不同成員按類別被分配到了不同的內(nèi)存區(qū)域,值類型和引用類型的指針被分配到了棧上,引用類型的實例對象被分配到了托管堆上,靜態(tài)成員被分配到了全局?jǐn)?shù)據(jù)區(qū)。此時棧上的指針會指向堆上的對象。當(dāng)對象使用完以后,引用和實際對象的聯(lián)系就會斷開,從而從而使對象冬眠。因為棧具有自我維護(hù)性,它的內(nèi)存管理可以通過操作系統(tǒng)來完成,而此時堆上的冬眠對象就需要通過垃圾回收器(GC)使用一定的算法來進(jìn)行回收,釋放對象所占據(jù)的內(nèi)存。

C#中的深拷貝與淺拷貝

深拷貝:又稱深度克隆,它完全是新對象的產(chǎn)生,不僅復(fù)制所有的非靜態(tài)值類型成員,而且復(fù)制所有引用類型成員的實際對象。(即棧上和堆上的成員均進(jìn)行復(fù)制)

淺拷貝:又稱影子克隆,只復(fù)制原始對象中的所有的非靜態(tài)的值類型成員和所有引用類型成員的引用,就是說,原始對象和新對象共享所有引用類型成員的對象實例。(即只復(fù)制棧上的成員)

注:不管是深拷貝還是淺拷貝,都不會復(fù)制全局?jǐn)?shù)據(jù)區(qū)的成員,因為全局?jǐn)?shù)據(jù)區(qū)的成員是靜態(tài)成員,它屬于某一個類,并不屬于類的實例對象,因此無法復(fù)制。

C#中的深拷貝可以通過實現(xiàn)ICloneable接口來實現(xiàn),但是在不是必須實現(xiàn)ICloneable接口的情況下,應(yīng)避免類型繼承ICloneable接口。因為這樣做將強(qiáng)制所有的子類必須實現(xiàn)ICloneable接口,否則子類的新成員將不能被類型的深拷貝所覆蓋。

相關(guān)文章

  • C#中ListView控件實現(xiàn)窗體代碼

    C#中ListView控件實現(xiàn)窗體代碼

    這篇文章主要介紹了C#中ListView控件實現(xiàn)窗體的核心代碼,非常不錯,具有參考借鑒價值,對c#listview相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • C#使用RenderControl將GridView控件導(dǎo)出到EXCEL的方法

    C#使用RenderControl將GridView控件導(dǎo)出到EXCEL的方法

    這篇文章主要介紹了C#使用RenderControl將GridView控件導(dǎo)出到EXCEL的方法,是C#應(yīng)用程序設(shè)計中非常實用的一個功能,需要的朋友可以參考下
    2014-08-08
  • C#實現(xiàn)老板鍵功能的代碼

    C#實現(xiàn)老板鍵功能的代碼

    最近在做項目中遇到需要增加個老板鍵功能,找一慣的方式,開始從網(wǎng)絡(luò)下手尋找: 關(guān)鍵字類似”C# 老板鍵“,一搜,一堆又一堆,然而出來的代碼大多數(shù)都不是太合適,下面給大家分享下自己的解決方案已經(jīng)一個網(wǎng)友的解決方案,有需要的小伙伴可以參考下。
    2015-05-05
  • C#中靜態(tài)方法和實例化方法的區(qū)別、使用

    C#中靜態(tài)方法和實例化方法的區(qū)別、使用

    這篇文章主要介紹了C#中靜態(tài)方法和實例化方法的區(qū)別、使用,文中講解的非常細(xì)致,對大家的學(xué)習(xí)有所幫助,感興趣的朋友可以了解下
    2020-06-06
  • C#實現(xiàn)線程安全的簡易日志記錄方法

    C#實現(xiàn)線程安全的簡易日志記錄方法

    這篇文章主要介紹了C#實現(xiàn)線程安全的簡易日志記錄方法,比較實用的功能,需要的朋友可以參考下
    2014-08-08
  • 淺析C#數(shù)據(jù)類型轉(zhuǎn)換的幾種形式

    淺析C#數(shù)據(jù)類型轉(zhuǎn)換的幾種形式

    本篇文章是對C#中數(shù)據(jù)類型轉(zhuǎn)換的幾種形式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • C#實現(xiàn)TCP和UDP通信的示例詳解

    C#實現(xiàn)TCP和UDP通信的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)TCP和UDP通信的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解一下
    2023-03-03
  • C#實現(xiàn)Markdown內(nèi)容轉(zhuǎn)為Word或PDF

    C#實現(xiàn)Markdown內(nèi)容轉(zhuǎn)為Word或PDF

    Markdown作為一種輕量級的標(biāo)記語言,因其簡潔易讀、語法清晰的特點(diǎn)被廣大程序員和技術(shù)文檔編寫者所青睞,本文主要介紹了如何使用C#實現(xiàn)Markdown內(nèi)容轉(zhuǎn)為Word或PDF,需要的可以參考下
    2024-03-03
  • C# 動態(tài)調(diào)用WebService的示例

    C# 動態(tài)調(diào)用WebService的示例

    這篇文章主要介紹了C# 動態(tài)調(diào)用WebService的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-11-11
  • C#中的委托Delegate

    C#中的委托Delegate

    這篇文章介紹了C#中的委托Delegate,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05

最新評論

子长县| 桑植县| 多伦县| 太康县| 高阳县| 武威市| 永德县| 永寿县| 大渡口区| 乌兰县| 徐闻县| 赤壁市| 建阳市| 乡宁县| 三台县| 泽州县| 清远市| 岳阳县| 静安区| 当阳市| 天水市| 龙江县| 舟曲县| 正镶白旗| 靖西县| 清水河县| 朔州市| 阿瓦提县| 镇安县| 哈巴河县| 白河县| 县级市| 尉犁县| 四川省| 太仓市| 乐亭县| 巨鹿县| 三门峡市| 利津县| 明星| 阜康市|