结构有 class 引用然后它将存储在堆栈或堆 C#
Struct has class reference then it will store on stack or heap C#
众所周知,结构是值类型,因此分配在堆栈上,但是当结构具有 class 引用时,它将存储在堆栈或堆上。
public class A {
public int Value { get; set; }
}
struct Rectangle
{
public int width;
public int height;
public A a;
}
static void Main(string[] args)
{
Rectangle r ; // r will create on stack
r.width = 5; // it will create on stack as well,
r.a = new A(); // but what about A object, it will stored on stack or heap, as i know class object it stored on heap, now it is inside the struct.
}
我知道这是一个很常见的问题,我有 google 它,没有找到正确的答案。
提前致谢
struct is a value type, and is therefore allocated on the stack
这是不正确的。更正确的说法是“值类型可以存储在堆栈中”,参见 truth about value types。如果作为参数给出,值类型将 可能 存储在堆栈中,即使抖动可以随意将其存储在任何地方。但是如果该结构是 class 的一部分,它将与 class.
的所有其他字段一起存储在堆上
现在,对 A 的引用将作为结构的一部分存储,即 x64 上的 8 个字节。但是它指向的实际对象,包括 int Value
,将存储在堆上。
众所周知,结构是值类型,因此分配在堆栈上,但是当结构具有 class 引用时,它将存储在堆栈或堆上。
public class A {
public int Value { get; set; }
}
struct Rectangle
{
public int width;
public int height;
public A a;
}
static void Main(string[] args)
{
Rectangle r ; // r will create on stack
r.width = 5; // it will create on stack as well,
r.a = new A(); // but what about A object, it will stored on stack or heap, as i know class object it stored on heap, now it is inside the struct.
}
我知道这是一个很常见的问题,我有 google 它,没有找到正确的答案。 提前致谢
struct is a value type, and is therefore allocated on the stack
这是不正确的。更正确的说法是“值类型可以存储在堆栈中”,参见 truth about value types。如果作为参数给出,值类型将 可能 存储在堆栈中,即使抖动可以随意将其存储在任何地方。但是如果该结构是 class 的一部分,它将与 class.
的所有其他字段一起存储在堆上现在,对 A 的引用将作为结构的一部分存储,即 x64 上的 8 个字节。但是它指向的实际对象,包括 int Value
,将存储在堆上。