渋川です。
> >そゆのもあったですね。JavaはGC持ってるからメモリ・リークがない、
> >なんて考えてたら大間違いで、誰かが捕まえて離さないとぢわぢわメモリ
> >を食い潰し…てな事態は決してレア・ケースじゃない。C++はGCの持ち合わせ
> >はないけれど、new/deleteを差し替えられるから取得/解放のログみたいなの
> >を取るとか、取得失敗にみせかけることだってできる…とかなんとか
>
> 便乗質問。(最近C++から離れているもので。。。)
> new/delete の置き換えによって、GCを実現できるのでしょうか?
> そういう、ライブラリあるのですかね?
> あと、そのライブラリに置き換えてリンクするだけで、既存コード
> をまったくいじらなくて(再コンパイルもなし)GC対応って
> できるのでしょうか?
new/deleteの置き換えだけではGCはできないと思います。
new/deleteの置き換えだと、メモリ確保の時に記録は取れるのですが、そのメモ
リ領域が現在
使われているかどうか、というのはその割り当て記録だけを見てもわからないか
らです。
テストの時に解放し損ねのメモリがあるよ、と最後に通知する程度であれば既存
コードを変更
する必要はないです。CppUnit-xにもそれ用のコードがおまけでついていたよう
な気がしました。
C/C++用のGCライブラリのBoehm GCも、使っているかどうかを判定するのには苦
労している
ようです。ソースコードみても環境依存なアセンブラコードとか含まれています
しね。
http://homepage2.nifty.com/aito/gc/gc.html
newで作ったオブジェクトのポインタをstd::auto_ptrとかboost::shared_ptrと
かのスマートポインタ
で受け取るようにすれば、参照カウント式のGCができます。簡易的ですが。マー
ク&スイープ方式
のようにメモリ空間を探索する手間がなくて、パフォーマンス劣化も少ないので
C++向きかと思います。
# C++が好き、という人以外があえてC++を使うのはJavaとかよりも速度が出したい、
# メモリ消費を押さえたい、という意図があるとの推測。
しぶかわよしき<yoshiki@....jp>