c#中托管和非托管資源詳解-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!

成都創(chuàng)新互聯(lián)為您提適合企業(yè)的網(wǎng)站設計?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強的網(wǎng)絡競爭力!結(jié)合企業(yè)自身,進行網(wǎng)站設計及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到網(wǎng)站制作、成都網(wǎng)站制作, 我們的網(wǎng)頁設計師為您提供的解決方案。

小編這次要給大家分享的是c#中托管和非托管資源詳解,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

前言

c# 托管和非托管比較重要,因為這涉及到資源的釋放。

現(xiàn)在只要在計算機上運行的,無論玩出什么花來,整個什么概念,逃不過輸入數(shù)據(jù)修改數(shù)據(jù)輸出數(shù)據(jù)(計算機本質(zhì)),這里面有個數(shù)據(jù)的輸入,那么我們的內(nèi)存有限啊,這里面就牽扯到數(shù)據(jù)釋放。

看下c# 的垃圾回收是怎么樣的。

了解垃圾回收之前首先要了解數(shù)據(jù),了解數(shù)據(jù)需要了解數(shù)據(jù)類型啊,數(shù)據(jù)類型分為值類型還有引用類型。

windows 使用一個虛擬尋址系統(tǒng),該系統(tǒng)把程序可用的內(nèi)存地址映射到硬件內(nèi)存中的實際地址上,這些任務完全由windows 在后臺管理。我們的程序運行在操作系統(tǒng)上,那么我們作為程序員關系的就是這個虛擬尋址系統(tǒng)。

這東西有什么用呢?

比如32位系統(tǒng)中,每個進程所占用的最多4G(4G這樣來的,2^32,4個字節(jié)),那么這個程序如果進行管理的這4G,它不需要知道在硬件地址是多少。

比如這個進程申請了1k內(nèi)存,那么這個進程管理的實際是從0到1k的虛擬內(nèi)存,而不需要知道這個硬件物理內(nèi)存地址是多少,有一個可以直接證明的就是我們寫c++輸出指針的時候,發(fā)現(xiàn)指針輸出1千多,

你覺得可能是物理內(nèi)存地址的1千多嗎?默默的打開資源管理看看現(xiàn)在占用多少內(nèi)存。

默認情況下,32 位計算機上的每個進程都具有 2 GB 的用戶模式虛擬地址空間。這里解釋一下,每個進程2個G是虛擬地址,就是在這個進程維護一個2G的虛擬地址,并不是實際占有2G的硬件內(nèi)存地址。

盜一張圖:

c#中托管和非托管資源詳解

虛擬地址有三種狀態(tài):

狀態(tài)描述
Free該內(nèi)存塊沒有引用關系,可用于分配。
保留內(nèi)存塊可供你使用,并且不能用于任何其他分配請求。 但是,在該內(nèi)存塊提交之前,你無法將數(shù)據(jù)存儲到其中。
已提交內(nèi)存塊已指派給物理存儲。

那么這個虛擬內(nèi)存上又分了堆和棧,棧上存儲值類型,堆上存儲引用類型。

他們的存儲方式不一樣。

下面是棧:

c#中托管和非托管資源詳解

棧是這樣子的先用高位后用低為,比如申請80000,先用的就是80000 直到為0為止。

{
 int a=10;
 double b=100.0;
}

網(wǎng)頁標題:c#中托管和非托管資源詳解-創(chuàng)新互聯(lián)
新聞來源:http://bm7419.com/article12/djhcgc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計、網(wǎng)站建設、網(wǎng)站營銷、定制開發(fā)品牌網(wǎng)站設計、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司