我读到局部变量将存储在堆栈存储器中,而参考变量将存储在堆存储器中。
现在,我有一种情况是在参考空间中创建本地对象。因此该对象将保存在哪里,以及如何引用该对象。
我试图找出哪些变量存储在堆栈存储器和堆存储器中。
Employee.cs
class Employee
{
int EmpId;
public int GetEmpId()
{
return this.EmpId ;
}
public void SetEmpId(int EmpId)
{
this.EmpId = EmpId;
}
public Job j = new Job();
}
Job.cs
class Job
{
int JobId;
public int GetJobId()
{
return this.JobId ;
}
public void SetJobId(int JobId)
{
this.JobId = JobId;
}
}
Program.cs
class Program
{
static int a =1;
static void Main(string[] args)
{
Employee E1 = new Employee();
Employee E2 = new Employee();
E1.SetEmpId(2595);
E1.j.SetJobId(25);
Console.WriteLine(E1.GetEmpId());
Console.WriteLine(E1.j.GetJobId());
}
}
我正在使用Visual Studio代码
任何人都可以帮助我找到进入堆栈内存的内容和进入堆内存的内容。
[Stack space用于将参数传递给方法和用于方法中定义的局部变量。引用类型的局部变量将存储在堆中,并且指向该对象的指针将存储在堆栈中。但是,值类型的局部变量将存储在堆栈中。
顺便说一句,堆栈空间归线程所有。默认堆栈大小为1MB。每个线程都有一个堆栈,而应用程序通常只有一个堆。
并且对象与它们的所有字段和属性一起存储在堆中。
现在,我们逐行走。
static int a = 1;
静态字段将与Type
对象一起存储在堆中。因为,实际上与Type
对象相关的静态字段将由CLR在首次访问该Type
实例或直接访问Type
实例时自动创建。该Type
对象包含所有类型相关的信息。
然后:
Employee E1 = new Employee();
Employee E2 = new Employee();
您在堆上有两个Employee
对象。以及该对象在堆栈中的地址(E1
和E2
)。但是,如果Employee
是一个结构,则E1
和E2
将与所有信息一起存储在堆栈中。如果该结构具有某个引用类型的字段,则该字段的数据将存储在堆中,而该字段的地址将存储在Employee
内部的堆栈中。