【发布时间】:2013-12-27 17:23:39
【问题描述】:
很明显since the structs are value types in c#, they are stored on stack 而a class object is stored on the heap(它的引用,当然存储在堆栈中)。
警告:(是的,这可能并不总是正确的。感谢@Jon 的纠正)但在大多数情况下,是的!
但是,a class one of whose member is of type struct 呢?现在,内存模型将如何?
顺便说一句,我如何检查某个对象是否位于 stack 或 heap 中?
好的。一些假设:
- 此类在函数内部是本地的。
- 结构是
member而不是variable。 (感谢更正。)
【问题讨论】:
-
这有关系吗?它可能不像你想象的那么清晰......在这里查看 Eric 的 cmets:blogs.msdn.com/b/ericlippert/archive/2009/04/27/…
-
“很明显,由于结构是 c# 中的值类型,因此它们存储在堆栈中” - 这是一个不正确的陈述,正是您给出的示例。
-
@JonSkeet:更正:)
-
我猜测实际的内存模型更复杂,但从逻辑上讲,所有类都由某种级别的值类型组成(如果它们有状态)。正如您所说,类存储在堆上。
-
类本身没有变量。它们的成员可以是字段、方法、属性、事件等。方法有变量。