从关于Heap和Stack 的SO回答 1中,它提出了一个问题:为什么知道变量的分配位置很重要?
在另一个答案,有人指出堆栈更快.这是唯一的含义吗?有人可以提供一个代码示例,其中简单的分配位置更改可以解决问题(例如,性能)?
请注意,此问题是特定于.NET的
1问题从SO中删除.
只要您知道语义是什么,堆栈与堆的唯一结果就是确保您不会溢出堆栈,并意识到垃圾收集堆相关的成本.
例如,JIT 可能会注意到新创建的对象从未在当前方法之外使用(引用永远不能在其他地方转义)并在堆栈上分配它.目前它不会这样做,但这是合法的事情.
同样,C#编译器可以决定在堆上分配所有局部变量 - 堆栈只包含对MyMethodLocalVariables实例的引用,并且所有变量访问都将通过它实现.(事实上,委托或迭代器块捕获的变量已经具有这种行为.)
你的问题出现了,而Eric Lippert正在深入审查C# - 我有一节解释C#1中的内容,他认为开发人员不应该关心.