8
関数Data_wrap_struct
を使用してRuby拡張とImを記述しています。Data_wrap_structとmark関数
Rubyのマークアンドスイープガベージコレクションプロセスに参加するには、自分の構造を解放するルーチンと、自分の構造から他の構造への参照をマークするルーチンを定義する必要があります。私は古典的なfree
関数をメモリを解放するために渡しますが、マーク関数の使用方法はわかりません。
私の構造体は、私は私がどのようにマーク機能を確認するために
は、誰かが私に例を示すことができる構造体Bのcollection
内の参照をマークするマーク機能が必要だと思い、この
typedef struct
{
int x;
int y;
} A;
typedef struct
{
A collection[10];
int current;
} B;
のように聞こえます作品ですか?
他のRubyオブジェクトによって参照される非Rubyオブジェクトもマークする必要がありますか?私の場合は、他のRubyクラス(それらを参照)によって作成されたウィジェットのツリーがあります。 – lzap
@Izap、no。 'mark'関数は、Rubyのガベージコレクタに、Ruby仮想マシンの外部のコード(C拡張など)から作成された** Rubyオブジェクト**を伝えるために使用されます。他のネイティブ非Rubyオブジェクトを作成するRubyオブジェクトを手元に置いている場合は、Rubyオブジェクトがガベージコレクションされた後にリソースを解放する 'free'関数を実装することができます。 –