堆栈上的引用对象

时间:2011-03-29 16:25:33

标签: c#

C#允许您将引用对象放在堆栈上吗?你为什么想这么做?这是什么意思?

3 个答案:

答案 0 :(得分:4)

它是特定于实现的 - 由C#编译器决定如何将源代码转换为其目标平台,而C#规范并不保证如何分配对象。假设有一个IL后端,那么由执行引擎决定真正决定如何在生成的IL的范围内分配内存。 (我相信,有一些更明确的保证,但我怀疑它禁止未来的优化。)

我所知道的最接近的是堆栈分配数组,这只在不安全的代码中可用,而且我认为无论如何你都不能真正获得对该数组的正常引用。

至于为什么你想要做这样的事情 - 大概如果你能保证除了你当前的方法只对一个对象感兴趣,你想要利用快速分配而不是打扰GC。

答案 1 :(得分:0)

不,参考对象只能在堆上生存(即通过new分配)。

在C ++中,您可能希望堆栈上的对象避免分配/释放/引用跟踪麻烦。除非要在当前函数之外使用该对象,否则没有理由将它放在堆上。在C#中,由于其垃圾收集性质,终身跟踪不是一个问题。

答案 2 :(得分:-1)

对象的引用总是在堆栈上。如果您希望整个对象驻留在堆栈上,您可以将其定义为 struct 而不是

至于为什么要这样做,如果这是一个经常使用的对象,你可以通过让对象驻留在堆栈中而不是访问堆来提高性能。

相关问题