創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!
成都創(chuàng)新互聯(lián)為您提適合企業(yè)的網(wǎng)站設計?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強的網(wǎng)絡競爭力!結合企業(yè)自身,進行網(wǎng)站設計及把握,最后結合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到網(wǎng)站制作、成都網(wǎng)站制作, 我們的網(wǎng)頁設計師為您提供的解決方案。小編這次要給大家分享的是c#中托管和非托管資源詳解,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
前言
c# 托管和非托管比較重要,因為這涉及到資源的釋放。
現(xiàn)在只要在計算機上運行的,無論玩出什么花來,整個什么概念,逃不過輸入數(shù)據(jù)修改數(shù)據(jù)輸出數(shù)據(jù)(計算機本質),這里面有個數(shù)據(jù)的輸入,那么我們的內存有限啊,這里面就牽扯到數(shù)據(jù)釋放。
看下c# 的垃圾回收是怎么樣的。
了解垃圾回收之前首先要了解數(shù)據(jù),了解數(shù)據(jù)需要了解數(shù)據(jù)類型啊,數(shù)據(jù)類型分為值類型還有引用類型。
windows 使用一個虛擬尋址系統(tǒng),該系統(tǒng)把程序可用的內存地址映射到硬件內存中的實際地址上,這些任務完全由windows 在后臺管理。我們的程序運行在操作系統(tǒng)上,那么我們作為程序員關系的就是這個虛擬尋址系統(tǒng)。
這東西有什么用呢?
比如32位系統(tǒng)中,每個進程所占用的最多4G(4G這樣來的,2^32,4個字節(jié)),那么這個程序如果進行管理的這4G,它不需要知道在硬件地址是多少。
比如這個進程申請了1k內存,那么這個進程管理的實際是從0到1k的虛擬內存,而不需要知道這個硬件物理內存地址是多少,有一個可以直接證明的就是我們寫c++輸出指針的時候,發(fā)現(xiàn)指針輸出1千多,
你覺得可能是物理內存地址的1千多嗎?默默的打開資源管理看看現(xiàn)在占用多少內存。
默認情況下,32 位計算機上的每個進程都具有 2 GB 的用戶模式虛擬地址空間。這里解釋一下,每個進程2個G是虛擬地址,就是在這個進程維護一個2G的虛擬地址,并不是實際占有2G的硬件內存地址。
盜一張圖:
虛擬地址有三種狀態(tài):
狀態(tài) | 描述 |
Free | 該內存塊沒有引用關系,可用于分配。 |
保留 | 內存塊可供你使用,并且不能用于任何其他分配請求。 但是,在該內存塊提交之前,你無法將數(shù)據(jù)存儲到其中。 |
已提交 | 內存塊已指派給物理存儲。 |
那么這個虛擬內存上又分了堆和棧,棧上存儲值類型,堆上存儲引用類型。
他們的存儲方式不一樣。
下面是棧:
棧是這樣子的先用高位后用低為,比如申請80000,先用的就是80000 直到為0為止。
{ int a=10; double b=100.0; }