C# 值类型引用类型内存空间分配

通常来说,变量的值分配的位置与声明该变量的位置有关。局部变量的值总是在线程栈上,实例变量的值则和实例本身一起存储在实例存储的地方。引用类型实例和静态变量总是存储在堆上。

值类型也有可能分配在托管堆上:

这些特殊的情况包括数组中的元素﹑引用类型中的值类型字段﹑迭代器块中的局部变量﹑闭包情况下匿名函数(lamda)中的局部变量。

这是由于在这几种情况下的值类型实例如果分配在线程栈上,有可能会出现线程栈中的方法已经调用结束,但是还会访问这些值的情况。也就是说如果分配在线程栈上,有可能会随着被调用的方法的返回而被清除掉。因此它们也被分配在了托管堆上,以满足在方法返回之后还能够被访问的需要。

单纯的说“引用类型保存在托管堆上,值类型保存在线程栈上”是不准确的。

引用类型的确总是分配在托管堆上,但是值类型并非总是分配在线程栈上。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值