下面的场景是如何分配内存的?我设法把它弄糊涂了

How memory allocation has been done for below scenario? I have managed to muddle it

我在下面提到 属性 class 名称为 "Employee".

public class Employee
{
    public int EmpID { get; set; }
    public int DeptId { get; set; }
}

我们都知道"int"数据类型会存储在栈中,对象类型会存储在堆中,如下图所示。

我的问题是,当我要创建 Employee class 的对象时

Employee objEmployee = new Employee();

内存分配是如何完成的?

任何文献或相关link将不胜感激。

Employee 在您的示例中是引用类型。它放在堆中,在堆栈中你只有 reference。不管这个class

里面有什么字段

我建议你this article by Joseph Albahari看看值类型和引用类型的区别

We all know that "int" data type will be store in stack and Object type will be store in heap like as below snap.

因为那是完全错误的,我们都不知道

想想看:

int[] M() { return new int[] { 1 }; }

栈上有1吗?如果是这样,那么如何在 M returns 之后从 M 的调用者访问它?

显然不可能。 1 在堆上,即使它是一个 int。

您的问题是您考虑的是值,而不是变量。变量就是存储,不管里面存储的是整数还是引用。该存储必须在某个地方。 存储位置取决于生命周期要求。短期存储可以从短期存储池(堆栈或寄存器)中分配。长期存储是从长期存储池——堆中分配的。它与存储的值是结构还是引用没有任何关系

在您的示例中,属性的后备存储可以任意长存,因此必须从堆中分配。

您需要停止相信值类型的值进入堆栈的神话。值进入 storagestorage 进入需要满足其生命周期要求的地方