gpt4 book ai didi

c# - 是真的-垃圾收集器不会收集结构类型的对象

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:43 25 4
gpt4 key购买 nike

昨天,我们讨论了垃圾回收问题。

讨论了使用垃圾收集器收集使用类创建的对象,但是如果使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com