2014-04-04 42 views
0

我有一些代碼,看起來像這樣:如何在OS X上將GEM的__attribute __((section ...))用於Boehm GC?

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

... 

mumble = GC_MALLOC(100); 
... 

我使用的是貝姆垃圾收集器。我希望那些咕points指向的數據是安全的,因爲它仍然是活的。但事實上,它被收集並重新使用。我檢查了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);

然後一切都會奏效。

相關問題