free

下面内容仅供参考,有些不合理,还待完善
释放堆的全部内容如下
这里写图片描述

Glibc内存管理中介绍了free的过程不过有一点他是这样说的

判断 chunk 的大小和所处的位置,若 chunk_size <= max_fast,并且 chunk 并不位于
heap 的顶部,也就是说并不与 top chunk 相邻,则转到下一步,否则跳到第 6 步。
(因为与 top chunk 相邻的小 chunk 也和 top chunk 进行合并,所以这里不仅需要
判断大小,还需要判断相邻情况)

但是实际跟出来的对fast bin的操作有一些改动测试机是ubuntu16

add(0x100,"A"*0x10)
add(0x70,"B"*0x21)
delete(2)
delete(1)
gdb.attach(p)

跟出来的结果是

gefheap chunks
Chunk(addr=0x1ffd010, size=0x110, flags=PREV_INUSE)
[0x0000000001ffd010 78 fb 34 36 78 7f 00 00 78 fb 34 36 78 7f 00 00 x.46x...x.46x...]
Chunk(addr=0x1ffd120, size=0x80, flags=)
[0x0000000001ffd120 00 00 00 00 00 00 00 00 42 42 42 42 42 42 42 42 ........BBBBBBBB]

可以看出来2个chunk都还在,0x70的chunk在free的时候并没有跟topchunk进行合并。

这里面有一个问题如果是这种结构的chunk

这里写图片描述

当free small chunk的时候fast chunk和small chunk是会合并的。

邮箱:362058670@qq.com能帮我解决问题或者有疑问欢迎联系。
qq: 362058670

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值