返回

读这篇文章的时候,遇到一个疑问,不能评论,只好写这了

Lua GC 的源码剖析 (2)http://blog.codingnow.com/2011/03/lua_gc_2.html

"为什么有两个白色标记位?这是 lua 采用的一个小技巧。在 GC 的标记流程结束,但清理流程尚未作完前。一旦对象间的关系发生变化,比如新增加了一个对象。这些对象的生命期是不可预料的。最安全的方法是把它们标记为不可清除。但我们又不能直接把对象设置为黑色。因为清理过程结束,需要把所有对象设置回白色,方便下次清理。lua 实际上是单遍扫描,处理完一个节点就重置一个节点的颜色的。简单的把新创建出来的对象设置为黑,有可能导致它在 GC 流程结束后,再也没机会变回白色了。"

这段读了很久,感觉还是不能理解。如果新加的节点置为黑色,那么GC前会统一置为白色,不存在"再也没机会变回白色了"这种情况把。

名字: 自动排版 密码:

回复 | (2693) | 阿灰 | 2013-09-30 11:10:57