2012-07-28 61 views
2

在C#中,根據文檔, 「裝箱值類型將其打包到Object引用類型的實例中,這允許將值類型存儲在垃圾回收堆中。C中的裝箱和拆箱#

如果 沒有「垃圾收集堆」,會發生什麼情況? 垃圾收集堆是完全分配的,沒有「垃圾收集堆」內存可用? 它會拋出異常還是分配到其他地方?

+11

C#的實現是你使用的沒有GC堆? – 2012-07-28 05:12:43

+4

垃圾收集堆如何從固有依賴垃圾收集器的系統中丟失? – GSerg 2012-07-28 05:13:15

+0

其實,* .Net Framework * – 2012-07-28 05:13:39

回答

4

它像任何其他對象分配。如果沒有可用的內存,並且沒有任何內容可以通過垃圾回收獲得,則會得到一個OutOfMemoryException

你可以把這個代碼:

int x = 10; 
object o = x; 

爲這樣的:

int x = 10; 
object o = new Int32_Wrapper(x); 

其中Int32_Wrapper將是 「裝箱的int」 類。 (你不能在C#中明確地做到這一點,但這是最基本的效果。)

+0

謝謝Jon Skeet – Harikrishnan 2012-07-28 06:23:23

0

它更像垃圾收集器的堆。也就是說,存儲在這個存儲空間的對象是由GC「檢查」的。然而,這是最知名的,因爲只有堆,因爲有一個在當前CLR實現無其他堆=)

- 安德烈Calil

+0

感謝信用,但我不是這裏的專家。如果有人能得到** Jon Skeet **這個問題,他會有很大的幫助=) – 2012-07-28 05:57:47

+0

那麼爲什麼不發佈「如果有人可以得到@JonSkeet這個問題,他會有很大的幫助」=) – nawfal 2012-07-28 06:02:28

+0

@Hari對不起,我意外地低估了你的答案(在iPad上很容易做到),並且在撤銷期後才注意到。如果我明白[這是正確的](http://meta.stackexchange.com/questions/50035/accidental-voting),您必須編輯您的答案才能撤銷downvote。 – alx9r 2012-12-06 00:02:15

0

當垃圾收集堆被完全分配時,GC將被觸發以釋放內存,可以添加更多內存(來自OS管理的VM)到託管堆,直到沒有更多可用的內存溢出爲止。

+0

謝謝馮遠 – Harikrishnan 2012-07-28 06:23:46