かんだでし

ttate / jaist.ac.jpさんの書かれた、
	「[ruby-ext:00347] Re: Data_Wrap_Struct GC」
からの引用です。

> 立石です。
> 
> Date: Thu, 29 Jul 1999 18:29:15 +0900
> From: "Dai.K." <MAP2303 / mapletown.net>
> MAP2303>   Data_Wrap_Struct() で C構造体を持つオブジェクトを作ります。
> MAP2303>   ここで、同じC構造体を持つ別の Ruby Object を生成した場合、一方の参照が消
> MAP2303> えたら、そのオブジェクトはもう一方の状態に関係なく GC されると思います。
> MAP2303>   この場合、同様にチェック無く free に指定した関数まで呼ばれますか?
> 
> こういうコードを試してみてはどうでしょうか?


> void
> myfree(void *ptr)
> {
>   printf("myfree is called.");
>   if( fooptr ){
>     free(fooptr);
>     fooptr = NULL;
>   };
> };

> VALUE
> rb_foo_foo(VALUE self)
> {
>   VALUE value;
> 
>   printf("foo is called\n");


  そういえば print文 という手がありましたか(^^;
# 拡張モジュールはコンパイルが面倒で print文デバッグはあまりやらないでした

  まぁ情報共有ということで。


matz / netlab.co.jp (Yukihiro Matsumoto)さんの書かれた、
	「[ruby-ext:00346] Re: Data_Wrap_Struct GC」
からの引用です。

> ですから、共有しているオブジェクトに対してGCが起こると最初の
> オブジェクトがsweepされた時点でfreeされちゃいます。というこ

  おぉ、意味が分かるや。成長したなぁ(^^)