通过引用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 对象。以及堆栈中该对象的地址(E1E2)。 但是,如果 Employee 是一个结构,那么 E1E2 将与所有信息一起存储在堆栈中。如果该结构有一些引用类型的字段,那么该字段的数据将存储在堆中,该字段的地址将存储在 Employee 内的堆栈中。