Nap*_*eon 2 c# struct garbage-collection nullable
Nullable值类型是否会生成垃圾?例如:结构不是在堆上创建的,而是在堆栈上创建的,因为它是一个值类型.但是当该结构可以为空时,它仍然是值类型并仍然在堆栈上创建吗?
我问这个问题是因为我需要一个不会产生垃圾的可以为空的结构.
Eri*_*ert 20
结构不是在堆上创建的,而是在堆栈上创建的,因为它是值类型.
这是一种常见的误解,完全是误导.在堆上创建作为数组元素的结构.在堆上创建作为类的字段的结构.在堆上创建一个结构,它是lambda的一个封闭的外部变量.结构始终在堆上创建.只有当已知的变量生命周期比它们所处的方法的变量生命周期短时,才会在堆栈上创建结构.显然,如果它们的生命周期比方法的堆栈框架长,它们就无法在堆栈上创建!
此外,每个人都忘记了注册.寄存器既不是堆也不是堆栈.如果优化器决定刻录寄存器是值得的,那么优化器就不会阻止优化器生成结构作为寄存器.
但是当该结构可以为空时,它仍然是值类型吗?
是.可空类型是值类型.(虽然它不符合泛型类型或方法的值类型约束,但它具有特殊的装箱行为.)
它仍然是在堆栈上创建的吗?
如果在堆上创建了非可空值类型,那么也将在那里创建可以为空的值.
我需要一个不会生成垃圾的可空结构.
如果非可空结构不生成垃圾,那么可空结构也不会生成垃圾.