Index: [Article Count Order] [Thread]

Date:  Fri, 30 Jan 2004 16:20:48 +0900
From:  Shibukawa Yoshiki <yoshiki@....jp>
Subject:  [XP-jp:04849] Re: JaSST'04
To:  extremeprogramming-jp@....jp
Message-Id:  <401A05D0.7070506@....jp>
In-Reply-To:  <6.0.0.20.2.20040130152105.0277bdb0@inetgw3>
References:  <Your message of "Fri, 30 Jan 2004 14:06:50 +0900"<4019E66A.4020305@....com> <200401300530.i0U5U0H29039@....jp> <6.0.0.20.2.20040130152105.0277bdb0@inetgw3>
X-Mail-Count: 04849

渋川です。

> >そゆのもあったですね。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>