昨天,我们讨论了垃圾回收问题。
讨论了使用垃圾收集器收集使用类创建的对象,但是如果使用struct创建对象,则无法使用GC收集对象
我知道结构使用堆栈,而类使用堆。
但是,我猜GC永远不会只收集非托管代码。这是否意味着Structure类型是非托管代码。 (我不这么认为)。
还是GC仅处理堆而不是堆栈?
如果是,那么int数据类型呢? int是struct而不是class。因此,如果我们定义了int类型的对象,那么它不是由GC管理的吗?
最佳答案
如果无法从GC根目录访问它们,则GC将收集所有托管对象(而结构是托管对象)。
但如果使用struct创建,则无法被GC收集。
被告知的内容不正确。托管对象的创建方式无关紧要-如果不再有对其的引用,那么它将最终被收集。
还是这意味着GC仅负责堆而不负责堆栈?
GC会处理对象图-如果任何GC根都可以访问对象,则不会收集它们,否则,将最终被收集。堆栈和堆无关。
因此,如果我们定义了int类型的对象,那么它不是由GC管理的吗?int
(又称System.Int32
)是一个托管对象-一种结构。例如,如果在类中声明int
字段并且该类超出范围,则int
最终将由GC收集。
作为@leppie commented,在许多情况下,结构将放置在堆栈上,并且当弹出堆栈时,它们将不再存在-在这种情况下,GC不涉及(并且不需要) 。
关于c# - 是真的-垃圾收集器不会收集结构类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11699740/