C#内存管理之托管堆与非托管堆

在C#中,托管堆和非托管堆的区别在于,在托管堆中,垃圾回收器回收完废弃的内存后,有一个压缩操作,即在垃圾回收器每次释放了不再被引用的对象后,都会检查堆中的内存分配情况,他会压缩其他对象,把它们都移动会到堆的端部,使所有的未分配内存再次形成一个连续的块。这样,在下次分配新的对象时,计算机就不必去搜索整个堆,以找到足够大的内存来存储新对象。 在移动堆内的对象时,指向这些对象的所有引用都要用新的地址来更新,垃圾回收器会负责处理更新问题,当然这也会带来一定的性能损失。 由于托管的堆中,垃圾回收器具有压缩操作,因此使用托管的堆,就只需要读取堆指针的值即可,而不是搜索链接地址表,来查找一个地方以便放置新对象。 这种能够被垃圾回收器访问管理的堆,我们称为托管堆。反之,通过指针访问,不能被垃圾回收器访问,管理,需要手工管理内存释放的堆,我们成为非托管堆。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值