9.10.3 C 程序的保守 Mark & Sweep

目录

P608

平衡二叉树是由所有已分配块组成的,键是块的起始地址,每个块的头部存储指向左右儿子的指针(指向另一个块的起始地址)
之所以要这么建立平衡二叉树,是因为我们想要判断一个给定的指针p是否指向某一个已分配块(我们之前说假设指针都指向块的开头,那是理想情况下,这里是实际情况,完全有可能程序员自己在使用了malloc之后,新定义一个指针指向这个已分配块的内部,然后删除malloc返回的指针,我们当然认为这个已分配块是可以访问的),这样才可以找出到底可以回收哪些块(如果一个块没有任何指针指向,那么这个块就是可回收的);而要达到上面的效果,我们肯定要遍历每一个块的,用平衡二叉树去遍历就会更高效

P609

这里举出的C语言的回收器是保守的例子就是说我们在标记阶段的时候,要找出每一个可能的指针(对应图9-49中的根节点),从其开始遍历然后标记所有的已分配块;已分配块里面的有效载荷可以存储局部变量,而局部变量可能是指针,所以需要遍历一个块的有效载荷内部,于是就给了其指向b的机会

posted @ 2025-08-30 09:01  最爱丁珰  阅读(5)  评论(0)    收藏  举报