在实施自己的标记程序时,如何跟踪我完成了多少标记工作?我正在努力以精确模式使用 Boehm Weiser 垃圾收集器。我需要实现自己的标记程序。对于像包含大量指针的向量这样的大对象 -gc_mark.h
头文件说我应该将工作分解成更小的部分,并将我正在标记其指针的对象推回堆栈以稍后继续标记。我可以size_t work_to_do
向对象添加一个字段并使用它——但我看到了env
传递给 GC_mark_proc 的参数。该env
参数是否旨在存储已完成的工作量?
typedef struct GC_ms_entry * (*GC_mark_proc)(GC_word * /* addr */,
struct GC_ms_entry * /* mark_stack_ptr */,
struct GC_ms_entry * /* mark_stack_limit */,
GC_word /* env */);
该env
值是在定义对象的种类时设置的GC_new_kind
-GC_MAKE_PROC
之后似乎没有更新它的机制。这让我觉得这env
不是我想要的。如果不是 - 目的是env
什么?