0

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

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

...

mumble = GC_MALLOC(100);
...

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

(我确实找到了解决方案——但有人有更简单的想法吗?)

4

1 回答 1

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);

然后一切都会奏效。

于 2014-04-04T17:31:27.947 回答