在c#中,当int型存储在List或者int[]是int仍然在堆栈上,还是它被装箱/移动到堆中

本文关键字:int 移动 堆栈 存储 List 或者 | 更新日期: 2023-09-27 18:02:45

我理解int和所有值类型一样,都存储在堆栈上。Int型可以被装箱成对象,这意味着Int型是堆上的存储。但是当int型存储在List或int[]中时会发生什么呢?

我知道List ofT是类/引用类型/堆存储类型-这是否意味着列表中的int类型被装箱到堆上?

谢谢

在c#中,当int型存储在List<int>或者int[]是int仍然在堆栈上,还是它被装箱/移动到堆中

使用通用的List<int>类型时不需要装箱

如果存储在类型化列表中,则不加框

http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

"如果一个值类型用于类型T,编译器将为该值类型生成List类的具体实现。这意味着list对象的列表元素在可以使用之前不必装箱,并且在创建了大约500个列表元素之后,保存的非装箱列表元素的内存大于用于生成类实现的内存。"

我知道List ofT是类/引用类型/堆存储类型-这是否意味着列表中的int类型被装箱到堆上?

在堆上分配的存储中放置int与将int装箱不同。

装箱是指将int单独放置在其自己的object包装器中。这不会发生在通用的List<int>中,但会发生在ArrayList中。 http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx