2017-04-12 84 views
1

我有下面提到的名称为“Employee”的属性类。如何为以下情况完成内存分配?我设法弄糊涂了

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

我们都知道,“INT”数据类型将在堆栈和对象类型的商店将在堆店像如下折断。

enter image description here

这里我的问题是,当我要创造这样

Employee objEmployee = new Employee(); 

员工类的对象如何分配内存已经做了什么?

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

+0

我不知道为什么要投票? –

回答

13

我们都知道,“INT”数据类型将在堆栈和对象类型的商店会像下面一样堆放在堆中。

自认为是完全错误,我们不都知道

想想看:

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

是在栈上1?如果是这样,那么在M返回后如何从M的主叫方访问?

显然它不能。即使它是一个整数,1也在堆上。

你的问题是你在考虑的是价值观,而不是变量。无论是否存在整数或参考,变量都是存储的。该存储必须在某个地方。 存储取决于寿命要求。短期存储可以从短期存储池 - 堆栈或寄存器分配。长期存储分配给长期存储池 - 堆。它有没有什么与存储的值是一个结构还是一个引用有关。

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

您需要简单地停止相信价值类型的值进入堆栈的神话。价值在存储存储去其需要去完成其生存期要求

-1

Employee在你的例子中是一个引用类型。它放在堆中,堆栈中只有reference。无论是这个类里面是什么领域

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

相关问题