一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C# 堆棧與堆(托管堆)

 TivonStone 2010-08-12

首先堆棧和堆(托管堆)都在進程的虛擬內(nèi)存中。(在32位處理器上每個進程的虛擬內(nèi)存為4GB)

堆棧stack

堆棧中存儲值類型。

堆棧實際上是向下填充,即由高內(nèi)存地址指向地內(nèi)存地址填充。

堆棧的工作方式是先分配內(nèi)存的變量后釋放(先進后出原則)。

堆棧中的變量是從下向上釋放,這樣就保證了堆棧中先進后出的規(guī)則不與變量的生命周期起沖突!

堆棧的性能非常高,但是對于所有的變量來說還不太靈活,而且變量的生命周期必須嵌套。

通常我們希望使用一種方法分配內(nèi)存來存儲數(shù)據(jù),并且方法退出后很長一段時間內(nèi)數(shù)據(jù)仍然可以使用。此時就要用到堆(托管堆)!

 

 堆(托管堆)heap

堆(托管堆)存儲引用類型。

此堆非彼堆,.NET中的堆由垃圾收集器自動管理。

與堆棧不同,堆是從下往上分配,所以自由的空間都在已用空間的上面。

比如創(chuàng)建一個對象:

Customer cus;

cus = new Customer();

申明一個Customer的引用cus,在堆棧上給這個引用分配存儲空間。這僅僅只是一個引用,不是實際的Customer對象!

cus占4個字節(jié)的空間,包含了存儲Customer的引用地址。

接著分配堆上的內(nèi)存以存儲Customer對象的實例,假定Customer對象的實例是32字節(jié),為了在堆上找到一個存儲Customer對象的存儲位置。

.NET運行庫在堆中搜索第一個從未使用的,32字節(jié)的連續(xù)塊存儲Customer對象的實例!

然后把分配給Customer對象實例的地址賦給cus變量!

 

從這個例子中可以看出,建立對象引用的過程比建立值變量的過程復(fù)雜,且不能避免性能的降低!

實際上就是.NET運行庫保存對的狀態(tài)信息,在堆中添加新數(shù)據(jù)時,堆棧中的引用變量也要更新。性能上損失很多!

有種機制在分配變量內(nèi)存的時候,不會受到堆棧的限制:把一個引用變量的值賦給一個相同類型的變量,那么這兩個變量就引用同一個堆中的對象。

當一個應(yīng)用變量出作用域時,它會從堆棧中刪除。但引用對象的數(shù)據(jù)仍然保留在堆中,一直到程序結(jié)束 或者 該數(shù)據(jù)不被任何變量應(yīng)用時,垃圾收集器會刪除它。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    九九热这里有精品20| 精品国产亚洲一区二区三区| 国产日韩熟女中文字幕| 中文字幕区自拍偷拍区| 国内精品伊人久久久av高清 | 国产熟女一区二区精品视频| 国产伦精品一一区二区三区高清版| 亚洲精品成人综合色在线| 亚洲做性视频在线播放| 丰满人妻一二区二区三区av| 国产欧美日韩视频91| 偷拍偷窥女厕一区二区视频| 91人妻久久精品一区二区三区| 精品日韩视频在线观看| 日本少妇aa特黄大片| 国产午夜福利在线观看精品| 中文字幕日韩欧美一区| 美女被后入视频在线观看| 不卡视频免费一区二区三区| 一本久道久久综合中文字幕| 国产超薄黑色肉色丝袜| 免费午夜福利不卡片在线 视频| 国产伦精品一一区二区三区高清版| 国产视频一区二区三区四区| 国产传媒精品视频一区| 精品国自产拍天天青青草原| 视频一区二区黄色线观看| 国产爆操白丝美女在线观看| 国产成人精品国产亚洲欧洲| 精品亚洲一区二区三区w竹菊| 成年男女午夜久久久精品| 亚洲最新中文字幕在线视频| 国产精品成人又粗又长又爽| 婷婷激情五月天丁香社区| 精品推荐国产麻豆剧传媒| 手机在线不卡国产视频| 色综合久久中文综合网| 亚洲一区二区三区av高清| 欧美成人黄色一级视频| 99精品国产自在现线观看| 国产毛片不卡视频在线|