从有关堆和堆栈的SO answer 1中,我提出了一个问题:为什么知道变量分配在何处很重要?
有人在another answer指出堆栈速度更快。这是唯一的含义吗?有人可以举一个简单的分配位置更改可以解决问题(例如性能)的代码示例吗?
请注意,此问题是.NET特定的
1问题从SO中删除。
最佳答案
只要您知道语义是什么,堆栈vs堆的唯一后果就是确保不会溢出堆栈,并意识到垃圾回收会带来一定的成本。
例如,JIT可能会注意到从未在当前方法之外使用过新创建的对象(该引用永远不会在其他地方转义)并将其分配在堆栈上。目前尚不这样做,但是这样做是合法的。
同样,C#编译器可以决定在堆上分配所有局部变量-堆栈仅包含对MyMethodLocalVariables实例的引用,并且所有变量访问都将通过该实例实现。 (实际上,委托(delegate)或迭代器块捕获的变量已经具有这种行为。)