所以这可能是一个愚蠢的问题,但我不确定 Ruby 扩展的确切 GC 行为。例如,如果我调用rb_hash_new
一个 C 函数,然后在将值返回给 Ruby 代码之前开始对其进行一些处理,那么逻辑是否会在中途中断并且 Ruby 哈希被 GC 回收?下面的示例代码。
VALUE my_function(VALUE rb_self) {
VALUE hash = rb_hash_new();
// Do some stuff with hash
return hash;
}
上面示例中的哈希是否可以在返回之前被释放?如果是这样,那么防止这种情况的唯一方法是确保所有分配的 Ruby 对象都被传递给的函数标记Data_Wrap_Struct
,即使它们只是暂时使用?