垃圾收集器在值类型和引用类型上的行为如何,它将释放内存值类型和引用类型.我有点困惑这可以任何人解释这一点,同时垃圾收集器删除免费的内存值类型或参考类型哪个删除第一
Eri*_*ert 23
你正在以错误的方式思考这个问题.不要再考虑"价值类型"和"参考类型"了.相反,开始考虑变量,以及这些变量是短暂的还是长期存在的.
垃圾收集堆的目的是回收与长期存在的变量关联的存储.堆栈 的目的是回收与短期变量相关的存储.
人们会试着告诉你"值类型在堆栈上"和"引用在堆上"等等,这是令人困惑的废话. 变量在堆栈或堆上(或寄存器 - 每个人都忘记了寄存器),变量可以是值类型或引用类型.
你一直在问"垃圾收集器首先要删除哪个?" 这个问题无法回答.垃圾收集堆不保证回收内存的顺序.当激活帧从堆栈中弹出时,将回收短期存储 - 堆栈.但是,如果运行时可以确定不再访问该引用,则C#语言允许垃圾收集器清除在从堆栈弹出框架之前由短期存储引用的存储.基本上,回收存储时是运行时的实现细节,随时可能发生变化.