首页 > 解决方案 > 如何在我自己的 boehm GC 标记程序中跟踪标记工作以及“env”的目的是什么

问题描述

在实施自己的标记程序时,如何跟踪我完成了多少标记工作?我正在努力以精确模式使用 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什么?

标签: boehm-gc

解决方案


推荐阅读