From: Masao M. <mu...@hi...> - 2003-10-14 10:58:02
|
むとうです。 On Tue, 14 Oct 2003 13:09:38 +0900 (JST) Masahiro Sakai (酒井政裕) <sa...@to...> wrote: > さかいです。 > > From: Masao Mutoh <mu...@hi...> > Subject: Re: [ruby-gnome2-devel-ja] Re: [ruby-gnome2-devel-ja] GCについての質問 > Date: Sun, 5 Oct 2003 22:25:09 +0900 > > > むとうです。 > > > > g_object_run_dispose()の宣言には /*< protected >*/ がついています。 > > > つまり、サブクラスが内部で呼び出すためのもので、 > > > それ以外のところから呼び出すべきではないと思います。 > > > > protectedってそういう意味なんですか。 > > glibやgtk+ではそういう意味で使っているように思えます。 なるほど。以後、気をつけます。 > > であれば、例えば、GLib::Object#destroyメソッドを作って > > (中身はrun_disposeと同じ)それを呼び出すというのでもダメですか? > > #同じことですけど。 > > > > 要は、明示的にGLib::Objectのインスタンスを破壊できるような > > メソッドが無いかなぁという話なんですが。 > > 実のところ、GObject一般を明示的に破壊するような > 公開された関数は無いはずです。 > > にしてもなんでダメなんだろう。 > > 一言で言えば「想定していない」からでは? > > そのオブジェクトを使ってる他のコードが、 > オブジェクトが明示的に破棄されることを想定していない場合、 > Segmentation Fault する可能性だってありますし。 > > > ってか通常のアプリケーションはどうやって解放しているんだろう。 > > 明示的に破壊せずに、単にunrefするだけです。 要は、Gtk::Object#destroyに相当するモノがあれば良いなぁ、 というつもりだったんですが、考えてみれば要はそれがundefですね。 Rubyからunrefが明示的に呼び出せないので、その代わりになるものが あれば良いのに、と思っていたのですが、それは結局、RubyのGCが やるべきってことですよねぇ。 となると、Ruby-GNOME2的には大きなオブジェクトを作る際はある程度 明示的にGC.startを行わないといけないと。 そう考えると、もともと大きなオブジェクトを作ることが想定される Gdk::Pixbuf等では、以前、いがらしさんのメールにあった、 「ある程度メモリを使ったであろう時点で明示的にGCを起動」 ということをやった方が良さそう(明示的にGC.startを行う確率が減る) ですねぇ。 とはいえ、「ある程度のメモリ使用量」というのはちょっと難しい ような気もします。 何か良い判断基準があれば良いのですが。何かアイデアありませんか? 単純に回数っていう手もありますね。Gdk::Pixbuf.newを10回したら GC.startを1回やる、とか。 -- .:% Masao Mutoh<mu...@hi...> |