问题标签 [boehm-gc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
164 浏览

c - 为什么在 openmp 并行块中使用的东西之后没有被 Boehm GC 收集?

我在我的 C 程序中使用 Boehm-GC 进行垃圾收集。我正在尝试并行化一个适用于数组的 for 循环。数组是通过 GC_malloc 分配的。循环执行完毕后,程序中不再使用数组。我调用 GC_gcollect_and_unmap 来释放数组。但是,当我使用 openmp 并行化 for 循环时,循环执行完成后数组永远不会被释放。这是完全相同的程序,我只在循环周围添加#pragmas 以使其并行化。我尝试在有和没有 openmp 并行化的情况下并排查看汇编代码,我看到数组指针正在以类似的方式处理,并且没有看到额外的指针被保留在任何地方。唯一的区别是 for 循环是作为主函数中的一个简单循环实现的,但是当我并行化它时,openmp 创建一个新函数##name##._omp_fn 并调用它。无论如何,我需要做些什么来让 Boehm-GC 收集阵列吗?我很难发布 MWE,因为如果程序足够小,Boehm-GC 根本不会启动。

这是没有并行化的代码摘录。

上面的代码垃圾收集了函数产生的对象。以下是并行化的代码。

对于此代码,对象不会被垃圾收集。仅通过 MWE 本身很难重现该问题,因为垃圾收集器不会启动小程序,但是当我使用完整的程序运行时,我正在观察这种行为。

0 投票
1 回答
94 浏览

ios - iOS 中不允许私有 API 调用(函数“exc_server”)

由于一个私有 API 函数调用,我的 iOS 应用程序(使用Boehm垃圾收集器)在 AppStore 中被拒绝。这里是文件中的违规功能os_dep.c

这里是文件的链接:os_dep.c on github

我试图注释掉函数定义调用,应用程序似乎运行良好,但这是一个非常糟糕的 hack。

我的问题:这个函数调用关键吗?iOS真的需要它吗?

0 投票
0 回答
68 浏览

c - 将 GMP 库与 Boehm 的垃圾收集器一起使用

所以...

我已经设置了 Boehm 的 GC,并想让 GMP 库使用它。

这就是我现在正在做的事情:

我做对了吗?

有什么需要考虑的吗?

0 投票
1 回答
87 浏览

c - Boehm GC 是否将 Win32 Fibers 堆栈识别为根?

Boehm GC 中线程与纤维的处理有什么区别?

Win32 CreateFiber 只采用所需的堆栈大小并分配它,而不给用户访问堆栈指针的权限(据我所知)。Boehm GC 是否自动将创建的堆栈识别为根?如果没有,我们如何让 GC 知道堆栈?我们是否使用 GetCurrentThreadStackLimits?

0 投票
1 回答
142 浏览

c++ - C 块扩展 (libBlocksRuntime) - 为 Block_copy() 使用自定义内存分配器 (Boehm GC)

我正在编写一个 C 程序,它使用 Apple 的 Blocks 扩展来提供词法闭包。我也在使用 Boehm 垃圾收集器。我希望 Block_copy() 在堆上分配块时使用 GC_MALLOC,以便它们被垃圾收集。

我从源代码编译 libBlocksRuntime ( https://github.com/mackyle/blocksruntime-DREDIRECT_MALLOC=GC_MALLOC -DREDIRECT_REALLOC=GC_REALLOC -DIGNORE_FREE ) ,以便让 Boehm 覆盖 malloc() 和 realloc() 调用。

然后我编译了上面的 c 程序,-fblocks -lBlocksRuntime -l:libgc.so -fsanitize=address但它显示内存已泄漏,因此 Block_copy() 未使用 Boehm 的分配器。

如何强制 libBlocksRuntime 使用 Boehm 的内存分配器?

编辑:我尝试通过使用 malloc 钩子,然后使用 LD_PRELOAD 来解决这个问题,但这些似乎都没有与 libBlocksRuntime (或一般的块)合作。

0 投票
1 回答
136 浏览

c - 在 OS X 上安装 Boehm GC

我想在 MacOS 上安装Boehm 垃圾收集器垃圾收集器。我查看了指南,但没有帮助;调用brew install libgc什么也没做。这是我尝试运行的示例代码:

不幸的是,我收到此错误:

有没有人知道在不从源代码构建它的情况下安装这个 GC 的好方法?

0 投票
0 回答
31 浏览

boehm-gc - 如何在我自己的 boehm GC 标记程序中跟踪标记工作以及“env”的目的是什么

在实施自己的标记程序时,如何跟踪我完成了多少标记工作?我正在努力以精确模式使用 Boehm Weiser 垃圾收集器。我需要实现自己的标记程序。对于像包含大量指针的向量这样的大对象 -gc_mark.h头文件说我应该将工作分解成更小的部分,并将我正在标记其指针的对象推回堆栈以稍后继续标记。我可以size_t work_to_do向对象添加一个字段并使用它——但我看到了env传递给 GC_mark_proc 的参数。该env参数是否旨在存储已完成的工作量?

env值是在定义对象的种类时设置的GC_new_kind-GC_MAKE_PROC之后似乎没有更新它的机制。这让我觉得这env不是我想要的。如果不是 - 目的是env什么?

0 投票
1 回答
22 浏览

c - 如何修改项目 Makefile 以集成 boehm gc

请问,有人熟悉 Boehm GC 吗?

我想在 Phoenix ( https://github.com/kozyraki/phoenix ) 的字数统计应用程序中使用它,但我未能修改 Makefile 以包含 GC 库。

在 Boehm 的文档页面上,他们只提供了一个简单的 c 示例和一个从 GC 目录树编译它的命令。我找不到任何关于如何将其与现有项目链接的教程。

谢谢

0 投票
0 回答
15 浏览

webassembly - BoehmGC、wasm malloc 和终结器

我已经设法让 BoehmGC 通过强制“侧栈”上的所有根来处理 webassembly。除了有很多终结器的情况外,这一切都很好。如果我没有终结器,这一切都可以工作,无论我分配了多少对象。一旦我设置了终结器,它就会失败,因为对象已损坏。终结器似乎在一个无效对象上被调用(0 处的值是无效的,或者它从一开始就没有被分配)。

现在我意识到这听起来有点模糊,但这对任何人来说都是一个警钟吗?

它总是在这个调用堆栈上失败。

__GC_Finalizer 被成功调用了无数次,并且只调用了一个 vmt 方法。伪代码如下:

它已经失败了,其中 obj 没有指向有效的 vmt(所有这些在数据段中都是常量,但它指向的 vmt 不是真正的 vmt 地址)。

如果有人有一些我可以查看的信息,比如关于终结器如何在内部工作的文档,或者我可以调试的地方,真的任何提示都会受到赞赏。