C#Nullable值类型生成垃圾?

Nap*_*eon 2 c# struct garbage-collection nullable

Nullable值类型是否会生成垃圾?例如:结构不是在堆上创建的,而是在堆栈上创建的,因为它是一个值类型.但是当该结构可以为空时,它仍然是值类型并仍然在堆栈上创建吗?

我问这个问题是因为我需要一个不会产生垃圾的可以为空的结构.

Eri*_*ert 20

结构不是在堆上创建的,而是在堆栈上创建的,因为它是值类型.

这是一种常见的误解,完全是误导.在堆上创建作为数组元素的结构.在堆上创建作为类的字段的结构.在堆上创建一个结构,它是lambda的一个封闭的外部变量.结构始终在堆上创建.只有当已知的变量生命周期比它们所处的方法的变量生命周期短时,才会在堆栈上创建结构.显然,如果它们的生命周期比方法的堆栈框架长,它们就无法在堆栈上创建!

此外,每个人都忘记了注册.寄存器既不是堆也不是堆栈.如果优化器决定刻录寄存器是值得的,那么优化器就不会阻止优化器生成结构作为寄存器.

但是当该结构可以为空时,它仍然是值类型吗?

是.可空类型是值类型.(虽然它不符合泛型类型或方法的值类型约束,但它具有特殊的装箱行为.)

它仍然是在堆栈上创建的吗?

如果在堆上创建了非可空值类型,那么也将在那里创建可以为空的值.

我需要一个不会生成垃圾的可空结构.

如果非可空结构不生成垃圾,那么可空结构也不会生成垃圾.

  • +1,你有没有厌倦不得不重复自己? (14认同)