相关疑难解决方法(0)

什么时候需要在Ruby C扩展中声明不稳定的VALUE?

我找不到很多文档,说明何时适合在Ruby扩展中声明VALUEas volatile,以避免使用中对象的过早垃圾收集.

这是我到目前为止所学到的.任何人都可以填补空白吗?

volatile不是需要使用:

  • 在C++对象成员中(因为它们从不在堆栈中?)
  • 在不调用Ruby API的C/C++方法中(因为在调用Ruby API 之前GC没有打开)

如果volatile 确实需要使用

  • 在C/C++方法中调用任何Ruby ALLOCmalloc宏/函数(因为这些可以在内存高度分散时触发GC)
  • 在C/C++方法调用任何Ruby功能(例如,rb_funcall,rb_ary_new等等)

其他避免GC的方法

  • 标记VALUEs正在使用中
  • 在对象创建期间禁用GC,然后重新启用它
  • 不要使用Ruby的分配方法(有风险)

一切都正确吗?我错过了什么细节?除了标记,是volatile唯一的方法吗?

c c++ ruby garbage-collection mark-and-sweep

6
推荐指数
1
解决办法
413
查看次数

标签 统计

c ×1

c++ ×1

garbage-collection ×1

mark-and-sweep ×1

ruby ×1