From: "H.Yamamoto" Date: 2004-08-21T12:36:05+09:00 Subject: [ruby-dev:24150] Re: ruby/tk crashes on bcc32 山本です。 >GCではなくて、ランタイムのヒープ管理用内部領域の話です。実装に >もよるでしょうが、それぞれのヒープから割り当てた領域は元のヒー >プに返さないとまずいことになりそうな気がします。 恥ずかしながら、ようやく理解できました。 static RTL -----ruby 本体----- - 拡張ライブラリ -- | | | | | メモリブロック1 | | メモリブロック2 | | フラグ1 | | フラグ2 | | ↑ | | ↑ | | malloc() { } |→↓ | malloc() { } | | free() { } | ↓→ | free() { } | | | | | ------------------- ------------------- メモリブロック・フラグの破壊 dynamic RTL ----- RTL dll ----- | | | メモリブロック | | フラグ | | ↑ | | malloc() { } | | free() { } | | | ------------------- -----ruby 本体----- - 拡張ライブラリ -- | | | | | malloc() { } |→↓ | malloc() { } | | free() { } | ↓→ | free() { } | | | | | ------------------- ------------------- 単に RTL dll の関数を呼んでる だけなので、管理領域は共通 仰る通り、gc.c に void ruby_xfree2(void* p) { if(p) free(p); } を実装 して、tcltklib で #define free(p) ruby_xfree2(p) としても落ちませんでした。 bcc32は、RTLが静的リンクでかつ、拡張ライブラリが動的リンクなのが 問題で、本当は双方が一致しているべきなのでしょうか?(というか、bcc32以外は 双方が一致している?) 一応 bcc32 にも dynamic RTL はあるので、これを使って ruby を ビルドできるといいんですけど、やり方がわかりませんでした (--;