【发布时间】:2012-02-29 00:20:58
【问题描述】:
我很想知道 C# 对象引用是如何在运行时(在 .NET CLR 中)在内存中表示的。想到的一些问题是:
对象引用占用多少内存?在类的范围与方法的范围中定义时是否有所不同?它所在的位置是否会根据这个范围(堆栈与堆)而有所不同?
在对象引用中维护的实际数据是什么?它只是一个指向它所指对象的内存地址还是更多?这是否会根据它是否定义在类或方法的范围内而有所不同?
与上述相同的问题,但这次是在讨论对引用的引用时,就像在将对象引用通过引用传递给方法时一样。 1 和 2 的答案有何变化?
【问题讨论】:
-
请注意,这些问题都是实现细节(可能会发生变化),实际上并不是关于 C#,而是关于 .NET CLR。
-
Chopperdave,好有趣的问题,但我想问一下您是否在问您的意思 - 对象引用主要是一个指针,这只是一个“数字”,具体取决于您的代码的系统架构正在运行。如果您询问 .Net 堆分配的工作原理,那完全是另一回事。
-
只是想补充一下,这里没有侮辱的意思,我并不是要暗示您不知道您的意思-问题是,在.Net中这是一个模棱两可的问题,并且它将帮助 Stack Overflow 上的未来用户准确了解我们正在谈论的上下文。
-
@RussC 未采取任何措施。在这种情况下,我对我不知道自己在问什么的想法持开放态度:)
-
@dlev 谢谢。我会编辑标题+标签来表示。
标签: c# memory clr object-reference