我有一些看起来像这样的代码:
__attribute__((section("__DATA,__mysection"))) char *mumble;
...
mumble = GC_MALLOC(100);
...
我正在使用Boehm垃圾收集器。我希望嘟嘟指出的数据是安全的,因为它仍然存在。但事实上,它被收集和重用。我检查了GC_print_static_roots():似乎整个__mysection部分都没有包含在任何根中。
(我确实找到了解决方案 - 但是有没有人有任何更简单的想法?)
答案 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);
然后一切都会奏效。