已经清楚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
。 (感谢更正。)答案 0 :(得分:6)
类本身将是一个引用类型,因此它的实例将保留在堆上。
作为struct
的属性是实例(即对象)的组成部分,因此也将保留在堆上,就像int
和{{1该对象的属性。
注意:不会引用enum
属性,就像没有对struct
和int
属性的引用一样。
答案 1 :(得分:2)
很明显,因为结构是c#中的值类型,所以它们 存储在堆栈上,而类对象存储在堆上(它的 参考,当然存储在堆栈上。)
这个假设是不正确的。 值类型仅在它们是本地变量时才会进入堆栈,并且不是闭包/ lambda /匿名方法的一部分。即使这样,如果抖动决定,它们可以放在堆上。
但是,哪个类的变量是结构类型呢?现在, 内存模型将如何?
上面的规则应该回答你的问题:因为值类型只能存储在堆栈中,如果它是局部变量,那么类的字段必须放在堆上。
您需要了解的有关价值类型的所有信息: http://blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx