【发布时间】:2014-06-19 10:19:27
【问题描述】:
我一直在阅读 Eric Lippert 的博客,特别是关于堆、堆栈和寄存器的主题,据我所知,将变量放在堆或堆栈上的决定主要与变量的“生命周期”有关,即“短命”或“长命”,如果对堆栈上的变量进行任何操作,使其生命周期超过其声明的函数的生命周期,它将成为通过编译时包装类进行堆“提升”的候选者,就像在闭包中使用堆栈变量的情况一样。所以问题是为什么 .net 编译器(仍然)不识别需要装箱并选择实现一个类的候选者,这当然总是在堆上分配?反过来又完全取消拳击?
【问题讨论】:
-
我不明白您的建议将如何改进。此外,这并不是在所有情况下都可以在编译时检测到的。
-
".. 并选择实现一个类," - 出于所有意图和目的,这将是拳击。
-
如果我可以换一种说法.. 在处理闭包时为什么不使用拳击?我并没有试图提出任何建议,我只是好奇为什么存在两种不同的方法来处理两个看似相似的场景,即闭包中的装箱与值类型。尽管 Brian 表示可能无法检测到变量是否会被装箱,但我仍然不清楚这种情况可能是什么。
-
您不能仅仅因为您需要对其中一些实例进行装箱,而对
int的所有实例进行装箱,并且您不能不 装箱int的任何实例仅仅因为您只需要装箱其中的几个。你有什么问题?