首页 > 解决方案 > 引用空间创建的变量将存储在哪里?他们将如何被引用到他们的参考空间?

问题描述

我读到局部变量将存储在堆栈内存中,而引用变量将存储在堆内存中。

现在我有一个在参考空间中创建本地对象的情况。那么该对象将保存在哪里,该对象将如何被引用呢?

我试图找出哪些变量存储在堆栈内存和堆内存中。

员工.cs

        class Employee
        {
            int EmpId;
            public int GetEmpId()
            {
                 return this.EmpId ;
            }

            public void SetEmpId(int EmpId)
            {
                this.EmpId = EmpId;
            }

            public Job j = new Job();
        }

作业.cs

    class Job
    {
        int JobId;

        public int GetJobId()
        {
             return this.JobId ;
        }

        public void SetJobId(int JobId)
        {
            this.JobId = JobId;
        }

    }

程序.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 代码。

谁能帮我找出堆栈内存中的内容和堆内存中的内容?

标签: c#.netmemoryheap-memorystack-memory

解决方案


堆栈空间用于将参数传递给方法和定义的局部变量。引用类型的局部变量将存储在堆上,指向该对象的指针将存储在堆栈上。但是,值类型的局部变量将存储在堆栈中。

顺便说一句,堆栈空间归线程所有。默认堆栈大小为 1MB。每个线程都有一个堆栈,而应用程序通常只有一个堆。

对象与它们的所有字段和属性一起存储在堆中。

现在,让我们逐行进行。

static int a = 1;

静态字段将与Type对象一起存储在堆中。因为,实际上与Type对象相关的静态字段将由 CLR 在首次访问该实例Type或直接访问Type. 该Type对象包含所有类型相关的信息。

然后:

  Employee E1 = new Employee();
  Employee E2 = new Employee();

堆上有两个Employee对象。以及堆栈中该对象的地址(E1E2)。但是,如果Employee是一个结构,那么E1E2将与所有信息一起存储在堆栈中。如果该结构具有引用类型的某些字段,则该字段的数据将存储在堆中,该字段的地址将存储在内部的堆栈中Employee


推荐阅读