【问题标题】:In c# when an int is stored in a List<int> or int[] is that int still on the stack or is it boxed/moved to the heap?在 c# 中,当 int 存储在 List<int> 或 int[] 中时,该 int 仍然在堆栈上还是被装箱/移动到堆中?
【发布时间】:2011-10-08 22:13:36
【问题描述】:

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

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

谢谢

【问题讨论】:

标签: c# .net


【解决方案1】:

使用通用 List&lt;int&gt; 类型时不需要装箱。

【讨论】:

    【解决方案2】:

    如果存储在类型化列表中,则不装箱

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

    "如果一个值类型用于类型 T,编译器会为该值类型专门生成一个 List 类的实现。这意味着 List 对象的列表元素在使用之前不必装箱,并且在创建了大约 500 个列表元素后,未装箱列表元素所节省的内存大于用于生成类实现的内存。”

    【讨论】:

      【解决方案3】:

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

      int 放入分配在堆上的存储空间与装箱int 不同。

      装箱是将int 单独放置在其自己的object 包装器中。这不会发生在通用 List&lt;int&gt; 中,但会发生在 ArrayList 中。

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

      【讨论】:

        猜你喜欢
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多