Doc*_*awk 6 c c++ ruby garbage-collection mark-and-sweep
我找不到很多文档,说明何时适合在Ruby扩展中声明VALUEas volatile,以避免使用中对象的过早垃圾收集.
这是我到目前为止所学到的.任何人都可以填补空白吗?
volatile它不是需要使用:volatile 确实需要使用ALLOC或malloc宏/函数(因为这些可以在内存高度分散时触发GC)rb_funcall,rb_ary_new等等)VALUEs正在使用中一切都正确吗?我错过了什么细节?除了标记,是volatile唯一的方法吗?
基于变量volatile不能“自行”更改值的假设,将变量标记为可防止 C/C++ 编译器应用某些优化。维基百科:挥发性变量
VALUE我认为当 a与 C 扩展之外的 Ruby 代码共享或可以更改时,应该使用它,以使编译器意识到这一事实。看看这个例子。