boehm-gc - 如何在我自己的 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
什么?
解决方案
推荐阅读
- sql - Athena 中的 SQL 错误代码 您的查询有以下错误: SYNTAX_ERROR: line 5:8: Column 'amount' cannot be resolved
- asp.net-web-api - 我无法在我的 Web API 中访问使用 Postman 中的 FormData 发布的文件。HttpContext.Current.Request.Params["document"] 返回 NULL
- javascript - 在滚轮事件而不是滚动时使导航栏链接处于活动状态?
- node.js - Express & csvtojson:“未处理的拒绝错误 [ERR_STREAM_WRITE_AFTER_END]:结束后写入”
- php - 将多个文件上传到一篇文章
- php - 如果不在网址中,则正则表达式删除数字
- java - 如何通过 Java 在 ZPL 中打印中文和西里尔字符?
- python - 我的 spark rdd.take() 执行时间过长。我需要它来处理列表中的 11600 个元素
- javascript - Node.js 事件队列、Promises 和 setTimeout()——按什么顺序排列?
- css - MailPoet:我如何固定我的定位?每次我放大和缩小时,一切都不合适。CSS