まつもと ゆきひろです

In message "[ruby-list:3066] about GC"
    on 97/06/02, MAEDA Shugo <shugo / po.aianet.ne.jp> 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関数が呼ばれる

です.
                                まつもと ゆきひろ /:|)