通过 .NET 9 转义分析,结构和类现在相等吗?

问题描述 投票:0回答:1

从内存分配的角度来看,

struct
(在大多数情况下)在堆栈上分配,而
class
在堆上分配。每个人都有自己的权衡。并且
struct
class
始终包含在 C# 工作面试中。

现在有了.NET 9逃逸分析,如果我的理解是正确的,这个概念就不再正确了,类将根据JIT判断来分配。我说得对吗?

c# memory-management jit .net-9.0 escape-analysis
1个回答
0
投票

什么都没有改变,也不会改变。这是一项优化,目前有限。正如 Stephen Toub 在 .NET 9 中的性能改进中所解释的那样:

在 .NET 9 中,对象堆栈分配开始发生。别太兴奋了,目前它的范围有限,但将来它可能会进一步扩大。

...它仅限于处理可以轻松证明对象引用没有离开当前帧的情况。即便如此,在很多情况下这将有助于消除分配,我预计它会在未来得到扩展以处理越来越多的情况。当 JIT 选择在堆栈上分配对象时,它会有效地将对象的字段提升为堆栈帧中的单独变量。

即使在更高版本上,这也不会改变值类型和引用类型之间的差异。它不会开始在引用类型中生成防御性副本或值相等,也不会允许在堆栈上分配大列表或缓冲区,或者在将对象传递给方法时强制复制。

© www.soinside.com 2019 - 2024. All rights reserved.