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

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

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

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

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

堆(heap):

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

棧(stack):

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

對象內存的分配與銷毀:

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

C#中的深拷貝與淺拷貝

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

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

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

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

相關文章

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

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

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

    C#使用RenderControl將GridView控件導出到EXCEL的方法

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

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

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

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

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

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

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

    淺析C#數據類型轉換的幾種形式

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

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

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

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

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

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

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

    C#中的委托Delegate

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

最新評論

新安县| 金华市| 建阳市| 鄢陵县| 香港 | 陇西县| 丽水市| 寿光市| 芒康县| 区。| 普陀区| 玉屏| 密山市| 康马县| 宜兴市| 尉犁县| 昆山市| 呼和浩特市| 通江县| 佛学| 八宿县| 桐乡市| 内乡县| 武威市| 酒泉市| 蓬莱市| 喀喇沁旗| 铁岭市| 都兰县| 慈溪市| 上杭县| 卓尼县| 吉安市| 同仁县| 保亭| 高邮市| 营山县| 巴楚县| 弋阳县| 中牟县| 于田县|