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

C# 如何为下面的场景分配内存?我设法把它弄糊涂了,c#,memory-management,stack,clr,heap-memory,C#,Memory Management,Stack,Clr,Heap Memory,我在下面提到了名为“Employee”的属性类 public class Employee { public int EmpID { get; set; } public int DeptId { get; set; } } 我们都知道,“int”数据类型将存储在堆栈中,对象类型将存储在堆中,如下所示 这里我的问题是,我什么时候要创建Employee类的对象 Employee objEmployee = new Employee(); 内存分配是如何完成的 任何文献或相关链

我在下面提到了名为“Employee”的属性类

public class Employee
{
    public int EmpID { get; set; }
    public int DeptId { get; set; }
}
我们都知道,“int”数据类型将存储在堆栈中,对象类型将存储在堆中,如下所示

这里我的问题是,我什么时候要创建Employee类的对象

Employee objEmployee = new Employee();
内存分配是如何完成的


任何文献或相关链接都将不胜感激。

Employee
在您的示例中为参考类型。它放在堆和堆栈中,您只有
引用它。不管这个类中有什么字段


我建议您查看值类型和引用类型之间的差异,在您的示例中,Employee是一个引用类型。它放在堆和堆栈中,您只有
引用它。不管这个类中有什么字段

我建议您查看值类型和引用类型之间的差异

我们都知道,“int”数据类型将存储在堆栈中,对象类型将存储在堆中,如下所示

由于这是完全错误的,我们并不都知道这一点

想想看:

int[] M() { return new int[] { 1 }; }
1在堆栈上吗?如果是这样,那么在M返回后如何从M的调用方访问它

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

你的问题是你考虑的是价值观,而不是变量。变量是存储器,无论其中存储的是整数还是引用。那个储藏室一定在某个地方存储的位置取决于生存期要求。短期存储可以从短期存储池(堆栈或寄存器)中分配。长期存储是从长期存储池(堆)中分配的。它与存储的值是结构还是引用无关

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

您只需停止相信值类型的值会出现在堆栈上的神话。值放在存储中,存储放在需要的地方以满足其生命周期要求

我们都知道,“int”数据类型将存储在堆栈中,对象类型将存储在堆中,如下所示

由于这是完全错误的,我们并不都知道这一点

想想看:

int[] M() { return new int[] { 1 }; }
1在堆栈上吗?如果是这样,那么在M返回后如何从M的调用方访问它

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

你的问题是你考虑的是价值观,而不是变量。变量是存储器,无论其中存储的是整数还是引用。那个储藏室一定在某个地方存储的位置取决于生存期要求。短期存储可以从短期存储池(堆栈或寄存器)中分配。长期存储是从长期存储池(堆)中分配的。它与存储的值是结构还是引用无关

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


您只需停止相信值类型的值会出现在堆栈上的神话。值放在存储中,存储放在它需要去的地方,以满足其生命周期要求。

我不知道为什么要投否决票?我不知道为什么要投否决票?