Как использовать GC Boehm с GCC __attribute __ ((раздел...)) на OS X?

У меня есть код, который выглядит так:

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

...

mumble = GC_MALLOC(100);
...

Я использую сборщик мусора Boehm. Я ожидаю, что данные, которые бормочут, будут считаться безопасными, поскольку они все еще живут. Но на самом деле он собирается и повторно используется. Я проверил GC_print_static_roots(): кажется, что вся секция __mysection не содержится ни в одном из корней.

(Я нашел решение для этого - но есть ли у кого-нибудь более простые идеи?)

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

Тогда все будет работать.

licensed under cc by-sa 3.0 with attribution.