通用列表是存储在堆栈还是堆中?
//List of Ints
List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(20);
myInts
是存储在堆栈还是堆上?如果我在列表中添加int
,是否会发生装箱或拆箱?
答案 0 :(得分:6)
在C#或.NET中创建对象时,没有“堆”或“堆栈”的概念。虽然列表存储在堆上,但这实际上是CLR如何管理其内存的实现细节。
这里没有拳击或拆箱。这是使用泛型List
类而不是非泛型ArrayList
的优势。当创建List<int>
的新实例时,就好像您编写了一个类,其唯一目的是管理int
列表。当从列表中检索到int
时,幕后甚至没有任何投射。
答案 1 :(得分:4)
List<T>
是参考类型。在内部,它使用T[]
。 Array是一种引用类型。引用类型的实例存储在堆上。由于示例中的列表是List<int>
,因此它只能保存int
并且不会发生装箱。如果您需要将值类型视为引用类型,则会发生拳击。
答案 2 :(得分:0)
对于像int
这样的结构,通用列表变得专业化,因此不需要装箱/拆箱。
请注意,值本身仍存储在List
的支持数组中。