作成日:2002.12.18
基本的には GC_register_finalizer を使って登録を行うことで、 obj がどこからも参照されないごみオブジェクトとなった時に、 fn が呼び出されることになります。void GC_register_finalizer(GC_PTR obj, GC_finalization_proc fn, GC_PTR cd, GC_finalization_proc *ofn, GC_PTR *ocd);
GC_register_finalizer を呼び出した時の cd も GC 情報中に保存され、 ファイナライザが呼び出されたときに client_data の値となります。typedef void (*GC_finalization_proc)(GC_PTR obj, GC_PTR client_data);
obj にガーベージとなったオブジェクトのアドレスが渡され、 client_data には、 GC_register_finalizer による登録時の cd が入ります。void my_finalizer(GC_PTR obj, GC_PTR client_data) { // 終了処理の内容をここに書く。 }
ファイナライザの呼び出し順序に関係する項目として、 int GC_java_finalization変数があります。 この変数の値を変更することで、 トポロジカル順序と非トポロジカル順序を更新できるとありますが、 Boehm GC のより高度な機能を呼び出さない場合、 2 つの処理の結果は同じになります。