.net中引用类型内的值类型的内存分配

sam*_*mar 6 .net c#

我认为这是一个非常微不足道的问题,但我无法在网上得到明确答案.

我有一个包含值类型和引用类型的类.考虑到类中的引用类型将在执行期间的某个时间实例化,如何为这样的类的每个成员分配内存?如何为每个成员存储和访问指针?还有哪种类型的内存结构,即堆栈或堆?

我知道这很多,如果我的代码中只使用了一个值类型的变量,那么它的值和所有其他细节(如类型等)都存储在堆栈中.类似地,如果实例化引用类型,则在堆中创建实际对象,并且将指向该存储器位置的指针存储在堆栈中.但是类(参考类型)中存在的值类型呢?他们存储在哪里以及如何访问?

我在下面给出了这样一个类的例子.参考这个课程的答案将非常有帮助.

public class Employee
{
    public int EmpNo { get; set; }
    public string EmpName { get; set; }
    public BankAccDetails AccDetails { get; set; }
}

public class BankAccDetails
{
    //Other properties here
}
Run Code Online (Sandbox Code Playgroud)

Hab*_*bib 5

但是存在于类中的值类型(引用类型)呢?它们存储在哪里以及如何访问?

值类型存储在声明它们的地方。在您的情况下,它们将在堆上。

但是您应该看到以下有关 C# 内存管理的文章。

关于值类型的真相 - Eric Lippert

在桌面 CLR 上的 C# 的 Microsoft 实现中,当值是局部变量或临时值而不是 lambda 或匿名方法的封闭局部变量时,值类型存储在堆栈中,并且方法体不是迭代器块,并且抖动选择不注册该值。

堆栈是一个实现细节,第一部分 - .NET 中的Eric Lippert
内存 - 去哪里 - Jon Skeet