欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

free

程序员文章站 2022-05-11 22:26:57
...

下面内容仅供参考,有些不合理,还待完善
释放堆的全部内容如下
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

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

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

相关标签: free函数