这是真的 - 垃圾收集器不会收集struct类型的对象

Ani*_*ani 1 .net c# asp.net oop garbage-collection

昨天,我们讨论了Gargbage收集.

讨论了使用Classes创建的对象是由垃圾收集器收集的,但是如果使用struct创建它则不能由GC收集它们.

我知道结构使用堆栈,类使用堆.

但是,我猜GC从不收集非托管代码.这是否意味着Structure类型是非托管代码.(我不这么认为).

或者是GC只处理堆而不是堆栈吗?

如果是,那么int数据类型呢.int是struct而不是class.因此,如果我们定义int类型的对象,是不是由GC管理?

Ode*_*ded 6

如果无法从GC根目录访问它们,GC将收集任何托管对象(以及结构托管对象).

但如果使用struct创建它,则无法通过GC收集它.

你被告知的是不正确的.如何创建托管对象并不重要 - 如果没有对它的引用,它将最终被收集.

或者这意味着GC只处理Heap而不是Stack?

GC处理对象图 - 如果任何GC根可以访问对象,则不会收集它们,如果不是,则最终会收集它们.堆栈和堆不相关.

因此,如果我们定义int类型的对象,是不是由GC管理?

int(AKA System.Int32)是一个管理对象 - 一个结构.如果int在类中声明一个字段并且该类超出范围,int则最终将由GC收集该字段.


正如@leppie 评论的那样,在很多情况下,结构将被放置在堆栈上,当堆栈弹出时它们将不再存在 - 在这种情况下,GC不会涉及(并且不需要).