- 论坛徽章:
- 0
|
void free(void *ap)
{
Header *bp, *p;
bp = (Header *)ap - 1;
for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr)
if (p >= p->s.ptr && (bp > p || bp < p->s.ptr))
break;
if (bp + bp->size == p->s.ptr) {
bp->s.size += p->s.ptr->s.size;
bp->s.ptr = p->s.ptr->s.ptr;
} else
bp->s.ptr = p->s.ptr;
if (p + p->size == bp) {
p->s.size += bp->s.size;
p->s.ptr = bp->s.ptr;
} else
p->s.ptr = bp;
freep = p;
}
正在看内存分配的实现,malloc的一个简单实现看明白了,但这个free()的实现彻底看蒙了,大致意思是遍历一个malloc维护的可用空间链表,找到可插入的地方把带释放的内存插入链表,但是代码实在是看的头大,哪位老大有闲情雅致给逐句讲解一下? |
|