保守的なGC

2ちゃんねるのD言語スレで、GCの話題が出ている。

保守的なGCなので、ubyteの配列の中にでも偶然ポインタとしてみるとGCが拡張したメモリアドレスを指すようなデータがあると、GCは参照があると判断して開放しないそうな。
ポエニーでは、IPアドレスや日本語ファイルやファイルサイズなどがポインタに誤認識される可能性がありそう。

と、GCの話が分かったところで、メモリが開放されないので使い物にならなくて止めておいた、受信コマンドのバッファリングを再度実装した。
受信データ用のバッファは、std.c.stdlib.mallocで取得して、クローズやデストラクタのタイミングで開放するようにしたら、GCだとメモリリークくさかったのがなくなった。
これでよいといえばよいのだけど、GCの意味がないなーと。

同じく保守的なGCのBoehm-GCは、ポインタを含まない領域をGCが走査しないような仕組みが用意されているらしいので、これを使っているらしいgdcはなにか対策しているのかな。
MinGWから使えるみたいだし、試してみようかな。