ram*_*ion 6 c ruby mark-and-sweep ruby-c-extension
我正在编写一个定义类的ruby扩展.如果我Data_Wrap_Struct()用来实现我的回调rb_define_alloc_func(),我是否需要手动标记并释放实例变量?或者这仍然是为我处理的?
Ruby的GC将收集Ruby对象的实例变量中引用的所有Ruby对象.您不必也不应该自己释放Ruby实例变量(即使用扩展中的rb_iv_set()/ 访问的任何对象rb_iv_get()).
但是,如果包装的C结构引用了Ruby对象,那么您必须在要mark传递给的回调中标记这些对象Data_Wrap_Struct().
(并且您将始终必须释放底层结构,并执行可能需要的任何其他清理,例如关闭free回调中的文件,套接字等.)
| 归档时间: |
|
| 查看次数: |
898 次 |
| 最近记录: |