我在下面提到了名称为 “Employee” 的属性类。
public class Employee
{
public int EmpID { get; set; }
public int DeptId { get; set; }
}
我们都知道"int"数据类型会存储在栈中,Object类型会存储在堆中,如下图所示。
我的问题是,当我要创建一个Employee类的对象时
Employee objEmployee = new Employee();
内存分配是如何完成的?
任何文献或相关链接将不胜感激。
最佳答案
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 返回后如何从 M 的调用者访问它?
显然不可能。 1 在堆上,即使它是一个 int。
您的问题是您考虑的是值,而不是变量。变量就是存储,不管里面存储的是整数还是引用。该存储必须在某个地方。 存储位置取决于生命周期要求。短期存储可以从短期存储池(堆栈或寄存器)中分配。长期存储是从长期存储池——堆中分配的。它与存储的值是结构还是引用没有任何关系。
在您的示例中,属性的后备存储可以任意长存,因此必须从堆中分配。
您需要停止相信值类型的值进入堆栈的神话。值进入存储,存储在需要去的地方以满足其生命周期要求。
关于c# - 下面的场景是如何分配内存的?我设法把它弄糊涂了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43361697/