これはばかげた質問かもしれませんが、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;
}
上記の例のハッシュは、返される前に割り当てが解除される可能性がありますか? Data_Wrap_Struct
もしそうなら、これを防ぐ唯一の方法は、割り当てられたすべてのRubyオブジェクトが、一時的にしか使用されていない場合でも、 渡された関数によってマークされるようにすることですか?