【发布时间】:2011-03-01 23:59:15
【问题描述】:
在引用类型中定义的值类型是存储在堆上还是堆栈上?
- 如果存储在堆上,那么值类型什么时候存储在堆栈上?
- 如果存储在堆栈中,那么堆内的内容是什么,因为所有内容最终都以值类型结束?
【问题讨论】:
-
我建议通过 C# 或 C# 深入学习 CLR 并阅读相关章节。这不是一个微不足道的话题..
标签: .net value-type reference-type
在引用类型中定义的值类型是存储在堆上还是堆栈上?
【问题讨论】:
标签: .net value-type reference-type
唯一存储在堆栈中的变量是函数的局部变量。对于引用类型,引用存储在堆栈中,而它所引用的对象存储在堆中。对于值类型,对象本身存储在堆栈中。请注意,可以从局部函数中逃逸(例如通过闭包)的局部变量存储在堆上的单独数据结构中,包括可能包含的任何值类型。
换句话说,因为引用类型总是存储在堆上,所以它们包含的任何东西(甚至值类型)也都存储在堆上。
【讨论】:
【讨论】:
引用自here:
每个局部变量(即一个声明的 在一个方法中)存储在堆栈中。 这包括引用类型变量 - 变量本身在堆栈上,但请记住 a 的值 引用类型变量只是一个 引用(或 null),而不是对象 本身。方法参数算作 局部变量也是如此,但如果它们是 用 ref 修饰符声明,它们 没有自己的插槽,但共享一个 插槽中使用的变量 调用代码
我猜TextBox txtbx = new TextBox(); 之类的意思是变量 txtbx 存在于堆栈中,但它的值通常是对存在于堆中的对象的引用。
引用类型的实例变量总是在堆上。那就是对象本身“生活”的地方。
【讨论】: