c++内存管理-VC6

本文解析malloc的cookie机制,探讨如何在内存分配中加入额外的8字节cookie,用于记录内存大小和边界保护,以及内存块的高效管理和合并策略。涉及16字节对齐、1MB内存块和64个链表的组织方式。
摘要由CSDN通过智能技术生成

malloc带有cookie,用掉8个字节。

在debug mode的情况下,会分配的大小。mDataSize真正要分配的内存大小。

gap:4个字符,如果越界就会报异常。

所有malloc分配的内存块,都被保存起来。

把刚计算出的size,如果比_sbh_threadhold(1016,这个没有加cookie)小,用_Sbh_alloc_block。

malloc的cookie机制

在malloc为用户分配内存的时候,除了分配用户本身的内存,还会在内存前后加上两个cookie,来记录分配了多少内存,这样在调用free函数的时候才能准确的回收内存。因此每次调用malloc函数都会产生cookie消耗。

会调整为16的倍数。用最后一位是0,在操作系统,1被使用。

一个header负责管理1Mb的内存。

每个page都是4k

0xffffff,设置-1,回收时,用-1作为分割器。第一块记录大小。

最后一条链表,管理大于1K。如果小于1K,计算用哪个链表。

上面是内存的划分给到申请者。

64个链表是16个字节,按16个字节递增。

上面是回收,检查cookie的最后一位是否是0,如果是0,可以合并。表明了上下cookie的作用。

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值