3

在 C# 中,根据文档,“装箱值类型将其封装在 Object 引用类型的实例中。这允许将值类型存储在垃圾收集堆上。”

如果 没有“垃圾收集堆”会发生什么?垃圾收集堆已完全分配并且没有可用的“垃圾收集堆”内存?它会抛出异常或分配到其他地方吗?

4

3 回答 3

4

这是一个像任何其他的对象分配。如果没有可用内存并且无法通过垃圾收集获得可用内存,您将获得一个OutOfMemoryException.

你可以想到这段代码:

int x = 10;
object o = x;

就像:

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

Int32_Wrapper“boxed int”类在哪里。(您不能在 C# 中显式执行此操作,但这是基本效果。)

于 2012-07-28T06:14:46.590 回答
0

它更像是垃圾收集器的堆。也就是说,存储在该内存空间中的对象由 GC“检查”。但是,它最为人所知的是只有堆,因为在当前的 CLR 实现中没有其他堆 =)

——安德烈·卡里尔

于 2012-07-28T05:54:41.450 回答
0

当垃圾收集堆完全分配后,将触发 GC 以释放内存,可以将更多内存(来自 OS 管理的 VM)添加到托管堆,直到没有可用内存为止,此时将抛出内存不足异常。

于 2012-07-28T06:18:22.930 回答