在C#中,根據文檔, 「裝箱值類型將其打包到Object引用類型的實例中,這允許將值類型存儲在垃圾回收堆中。C中的裝箱和拆箱#
如果
沒有「垃圾收集堆」,會發生什麼情況?
垃圾收集堆是完全分配的,沒有「垃圾收集堆」內存可用? 它會拋出異常還是分配到其他地方?
在C#中,根據文檔, 「裝箱值類型將其打包到Object引用類型的實例中,這允許將值類型存儲在垃圾回收堆中。C中的裝箱和拆箱#
如果
沒有「垃圾收集堆」,會發生什麼情況?
垃圾收集堆是完全分配的,沒有「垃圾收集堆」內存可用? 它會拋出異常還是分配到其他地方?
它像任何其他對象分配。如果沒有可用的內存,並且沒有任何內容可以通過垃圾回收獲得,則會得到一個OutOfMemoryException
。
你可以把這個代碼:
int x = 10;
object o = x;
爲這樣的:
int x = 10;
object o = new Int32_Wrapper(x);
其中Int32_Wrapper
將是 「裝箱的int」 類。 (你不能在C#中明確地做到這一點,但這是最基本的效果。)
謝謝Jon Skeet – Harikrishnan 2012-07-28 06:23:23
它更像垃圾收集器的堆。也就是說,存儲在這個存儲空間的對象是由GC「檢查」的。然而,這是最知名的,因爲只有堆,因爲有一個在當前CLR實現無其他堆=)
- 安德烈Calil
感謝信用,但我不是這裏的專家。如果有人能得到** Jon Skeet **這個問題,他會有很大的幫助=) – 2012-07-28 05:57:47
那麼爲什麼不發佈「如果有人可以得到@JonSkeet這個問題,他會有很大的幫助」=) – nawfal 2012-07-28 06:02:28
@Hari對不起,我意外地低估了你的答案(在iPad上很容易做到),並且在撤銷期後才注意到。如果我明白[這是正確的](http://meta.stackexchange.com/questions/50035/accidental-voting),您必須編輯您的答案才能撤銷downvote。 – alx9r 2012-12-06 00:02:15
當垃圾收集堆被完全分配時,GC將被觸發以釋放內存,可以添加更多內存(來自OS管理的VM)到託管堆,直到沒有更多可用的內存溢出爲止。
謝謝馮遠 – Harikrishnan 2012-07-28 06:23:46
C#的實現是你使用的沒有GC堆? – 2012-07-28 05:12:43
垃圾收集堆如何從固有依賴垃圾收集器的系統中丟失? – GSerg 2012-07-28 05:13:15
其實,* .Net Framework * – 2012-07-28 05:13:39