通过引用space创建的变量会存放在哪里?他们将如何引用他们的引用 space?
Where will the variables created by reference space be stored? How will they be referenced to their reference space?
听说局部变量会存放在栈内存中,引用变量会存放在堆内存中。
现在我遇到了在引用中创建本地对象的情况 space。那么那个对象会被保存到哪里,那个对象又会如何被引用呢?
我正在尝试找出堆栈内存和堆内存中存储了哪些变量。
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 代码。
谁能帮我找出什么进入栈内存,什么进入堆内存?
堆栈space用于向方法传递参数 和
对于方法中定义的 局部变量 。引用类型的局部变量将存储在堆中,指向该对象的指针将存储在堆栈中。但是,值类型的局部变量将存储在堆栈中。
顺便说一下,堆栈 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
内的堆栈中。
听说局部变量会存放在栈内存中,引用变量会存放在堆内存中。
现在我遇到了在引用中创建本地对象的情况 space。那么那个对象会被保存到哪里,那个对象又会如何被引用呢?
我正在尝试找出堆栈内存和堆内存中存储了哪些变量。
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 代码。
谁能帮我找出什么进入栈内存,什么进入堆内存?
堆栈space用于向方法传递参数 和 对于方法中定义的 局部变量 。引用类型的局部变量将存储在堆中,指向该对象的指针将存储在堆栈中。但是,值类型的局部变量将存储在堆栈中。
顺便说一下,堆栈 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
内的堆栈中。