对象和字段的内存分配

时间:2019-03-03 16:47:51

标签: c# heap-memory

我只需要简单说明对象的内存分配

可以说我有以下课程:

public class Test
    {
        public int a;

        public Test(int A)
        {
            a = A;
        }
    }  


////Main program


Test test1 = new Test(32);

Test test2 = test1;
test2.a = 5;

Print(test1.a.ToString());// output =5
Print(test2.a.ToString());// output =5

我的问题是:

我知道值类型在堆栈中分配,引用类型在堆中分配。但是,当创建对象并具有值类型字段时,该字段是否会分配?当我创建test1的副本并将其分配给test2时,两个对象都指向相同的内存位置,这是否意味着int a在堆栈中只有一个副本,因此这两个原因对象的输出为5?。

1 个答案:

答案 0 :(得分:0)

在这种情况下,引用类型具有值类型。它被保存到对象的堆空间中。如果您考虑一下,它实际上与对象存储对其他对象的引用的方式非常相似。在为对象内的值分配的空间内有一个已分配的空间。

两个对象打印相同的原因是因为您有两个变量引用了内存中的同一对象。当我们引用对象int a时,我们将从对象引用中得出A的位置值。因为两个变量都指向相同的引用,所以a的位置在内存中是相同的位置,因此值也相同