C# 字典变量如何存储在内存中?



谁能解释一下C#字典是如何存储在内存中的? 我知道在 C# 内存管理是使用堆和堆栈完成的。但是我真的找不到一个简单的解释,说明在创建字典变量时如何分配内存,它是在堆栈帧还是堆空间中创建的?

首先,你需要非常清楚你在这里问什么;你是说字典吗?还是变量?因为它们是两个完全不同的东西

字典是托管堆上的对象。

变量(对托管堆上对象的引用( - 可以表示"本地"、"参数"或"字段"。字段位于任何地方,并且取决于具有该字段的事物(引用类型与非装箱值类型(它本身可能是也可能不是某物上的字段(,与盒装值类型(。可以是堆或堆栈。参数和局部变量通常在堆栈上,除非它们被捕获到状态上下文中(异步方法、匿名方法/lambda、迭代器块、本地函数(,在这种情况下,它们实际上被视为字段;"关于什么的字段"取决于确切的上下文(例如,本地函数是结构(。另请注意,堆栈是一个实现细节!

你可能指的是"字典本身",在这种情况下:托管堆。

始终可以检查引用源以查看大多数 .NET 实现:

https://referencesource.microsoft.com/#mscorlib/system/collections/generic/dictionary.cs,d3599058f8d79be0

例如,字典中的所有条目都是结构体,因此,它们将像结构一样处理:

private struct Entry {
public int hashCode;    // Lower 31 bits of hash code, -1 if unused
public int next;        // Index of next entry, -1 if last
public TKey key;           // Key of entry
public TValue value;         // Value of entry
}

最新更新