由参考空间创建的变量将存储在堆栈或堆中的位置,如何将它们引用到它们的参考空间? (c#.dotnet)

问题描述 投票:0回答:1

我读到局部变量将存储在堆栈存储器中,而参考变量将存储在堆存储器中。

现在,我有一种情况是在参考空间中创建本地对象。因此该对象将保存在哪里,以及如何引用该对象。

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

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代码

任何人都可以帮助我找到进入堆栈内存的内容和进入堆内存的内容。

c# .net operating-system heap-memory stack-memory
1个回答
0
投票

[Stack 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内部的堆栈中。

© www.soinside.com 2019 - 2024. All rights reserved.