From: matz@... (Yukihiro Matsumoto) Date: 1997-06-02T13:46:31+09:00 Subject: [ruby-list:3067] Re: about GC まつもと ゆきひろです In message "[ruby-list:3066] about GC" on 97/06/02, MAEDA Shugo writes: | |前田です。 | |Cの構造体にrubyのオブジェクトを持たせている |のですが、GCの時にトラブルが起きるような気が |します。 具体的にどういうトラブルか教えていただけませんか? 開放されてはいけないオブジェクトが開放される? オブジェクトが開放されない? |README.EXTにCの大域変数はrb_global_variable |でrubyに教えてあげるように、とありますが、 |rb_global_variableを呼べば、そのオブジェクト |はGCでfreeしなくなるということでしょうか? rb_global_variable()で指定された変数が指しているオブジェクト が「生きている」とみなされます.rb_global_variable()で指定す るのはオブジェクトではなく,変数であることに注目してください. |また、その場合、明示的にオブジェクトを破棄 |するにはどうすればよいのでしょう? |obj_freeを呼んでしまっていいんでしょうか? いけません.どこからも参照されなくなったオブジェクトは自動的 に開放されます.rubyではユーザによる明示的なrubyオブジェクト の削除を許していません. もうちょっとGCについてまとめておくと ルートから参照できるオブジェクトと,そのオブジェクトから間 接的に参照できるオブジェクトは「生きている」. 「生きている」オブジェクト以外のオブジェクトは開放される. ルートとはrubyの変数,Cのスタック,rb_global_variable()で 指定されたCの大域変数である. Dataが開放される時には生成時に指定したfree関数が呼ばれる です. まつもと ゆきひろ /:|)