【问题标题】:Where are value types defined in a reference type stored (heap or stack)?引用类型中定义的值类型存储在哪里(堆或堆栈)?
【发布时间】:2011-03-01 23:59:15
【问题描述】:

在引用类型中定义的值类型是存储在堆上还是堆栈上?

  1. 如果存储在堆上,那么值类型什么时候存储在堆栈上?
  2. 如果存储在堆栈中,那么堆内的内容是什么,因为所有内容最终都以值类型结束?

【问题讨论】:

标签: .net value-type reference-type


【解决方案1】:

唯一存储在堆栈中的变量是函数的局部变量。对于引用类型,引用存储在堆栈中,而它所引用的对象存储在堆中。对于值类型,对象本身存储在堆栈中。请注意,可以从局部函数中逃逸(例如通过闭包)的局部变量存储在堆上的单独数据结构中,包括可能包含的任何值类型。

换句话说,因为引用类型总是存储在堆上,所以它们包含的任何东西(甚至值类型)也都存储在堆上。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 这实际上并没有回答他的问题(直接,反正)。
    • @Adam Robinson - 你是对的,谢谢。我需要更仔细地阅读问题。
    【解决方案3】:

    引用自here:

    每个局部变量(即一个声明的 在一个方法中)存储在堆栈中。 这包括引用类型变量 - 变量本身在堆栈上,但请记住 a 的值 引用类型变量只是一个 引用(或 null),而不是对象 本身。方法参数算作 局部变量也是如此,但如果它们是 用 ref 修饰符声明,它们 没有自己的插槽,但共享一个 插槽中使用的变量 调用代码

    我猜TextBox txtbx = new TextBox(); 之类的意思是变量 txtbx 存在于堆栈中,但它的值通常是对存在于堆中的对象的引用。

    引用类型的实例变量总是在堆上。那就是对象本身“生活”的地方。

    【讨论】:

    • 只有 nw 意识到,到目前为止,这篇文章的两个答案都指向同一篇文章。 :|
    • +1,尽管您的最后一句话(实际解决问题的部分)可能应该出现在 first
    猜你喜欢
    • 2015-01-24
    • 2014-02-11
    • 2011-04-02
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 2013-08-24
    • 2015-05-27
    • 2014-04-21
    相关资源
    最近更新 更多