一个简单的标记回收内存垃圾清理实现

shuxiang1990 2013-12-20 11:56:28
源代码来自:https://github.com/munificent/mark-sweep
贴个别人的源代码主要是想问个问题,里面有这样一个函数:
void sweep(VM* vm)
{
Object** object = &vm->firstObject;
while (*object) {
if (!(*object)->marked) {
/* This object wasn't reached, so remove it from the list and free it. */
Object* unreached = *object;

*object = unreached->next;
free(unreached);


vm->numObjects--;
} else {
/* This object was reached, so unmark it (for the next GC) and move on to
the next. */
(*object)->marked = 0;
object = &(*object)->next;
}
}
}

那地方虽然unreached空间被释放了,但是前一个节点不会留下悬挂指针吗?
...全文
129 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2013-12-20
  • 打赏
  • 举报
回复
不会。 因为他使用的就是前一个节点的指针,仔细看代码,object**

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧