如何在OS X上将Boehm GC与GCC的__attribute __((section ...))一起使用?

时间:2014-04-04 01:13:36

标签: macos garbage-collection boehm-gc

我有一些看起来像这样的代码:

__attribute__((section("__DATA,__mysection"))) char *mumble;

...

mumble = GC_MALLOC(100);
...

我正在使用Boehm垃圾收集器。我希望嘟嘟指出的数据是安全的,因为它仍然存在。但事实上,它被收集和重用。我检查了GC_print_static_roots():似乎整个__mysection部分都没有包含在任何根中。

(我确实找到了解决方案 - 但是有没有人有任何更简单的想法?)

1 个答案:

答案 0 :(得分:1)

你需要这些全局变量:

extern char __first_mysection __asm("section$start$__DATA$__mysection");
extern char __last_mysection  __asm("section$end$__DATA$__mysection");

在GC_INIT()之后,立即调用以下函数:     GC_add_roots(& __ first_mysection,& __ last_mysection_p + 1);

然后一切都会奏效。