作者wei115 (NEET)
看板C_and_CPP
标题[问题] malloc.c中的free()解读(?)
时间Tue Oct 9 16:38:41 2018
如题
The C Programming Language的最後有一段关於简单的malloc()&free()的实作
但其中的free()有段程式码一直看不明白
看了许多人写的超详细的笔记,但无奈一直参悟不了
所以想请板上大大帮忙解读一下m(_ _)m
http://freeport9.blog.163.com/blog/static/26050569200722104655122/
(简体网站)
void free(void *ap)
{
Header *bp, *p;
bp = (Header *)ap - 1; /* point to block header */
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; /* freed block at start or end of arena */
if (bp + bp->size == p->s.ptr) { /* join to upper nbr */
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) { /* join to lower nbr */
p->s.size += bp->s.size;
p->s.ptr = bp->s.ptr;
} else
p->s.ptr = bp;
freep = p;
}
其中的
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; /* freed block at start or end of arena */
这段程式码应该是在list中寻找适合把记忆体区块放进去的地方
但我看不懂其中奥秘
用GDB来看也不知道为什麽要这样比较,以及这样比较的用意
请各位大大帮解惑,谢谢m(_ _)m
p.s. 超详尽的笔记
https://paper.dropbox.com/doc/Lab-42-Mini-ARM-OS-LRpCaS35Pv7GNEWn0Zarq
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 120.109.130.197
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1539074330.A.A63.html
※ 编辑: wei115 (120.109.130.197), 10/09/2018 16:49:25
1F:→ longlongint: 介於两者之间插进去 10/09 23:39
2F:→ longlongint: 特例 起点终点 10/09 23:39
3F:→ longlongint: 插入时若连续就合并 10/09 23:43