Index: [Article Count Order] [Thread]

Date:  Fri, 30 Jan 2004 18:22:28 +0900
From:  Murayama Toshikiyo <murayama@....jp>
Subject:  [XP-jp:04852] Re: JaSST'04
To:  extremeprogramming-jp@....jp
Message-Id:  <20040130180656.02B9.MURAYAMA@....jp>
In-Reply-To:  <200401300718.i0U7I2h19626@....jp>
References:  <6.0.0.20.2.20040130152105.0277bdb0@inetgw3> <200401300718.i0U7I2h19626@....jp>
X-Mail-Count: 04852

村山です.

> >便乗質問。(最近C++から離れているもので。。。)
> >new/delete の置き換えによって、GCを実現できるのでしょうか?
> >そういう、ライブラリあるのですかね?
> なにやらできるみたいですよん。
> http://www.hpl.hp.com/personal/Hans_Boehm/gc/index.html
保守的GC(conservative GC)という奴ですね.過剰追跡やメモリフラグ
メンテーション(断片化)などの欠点があるので,JavaのようなGCに対応した
言語じゃあまり流行りません.

C++で保守的GCが使われるのは,言語の制約で,こういうのくらいしか
使えるGCがないためです.

------
>そゆのもあったですね。JavaはGC持ってるからメモリ・リークがない、
>なんて考えてたら大間違いで、誰かが捕まえて離さないとぢわぢわメモリ
>を食い潰し…てな事態は決してレア・ケースじゃない。
それは「メモリリーク」とは言わんでしょ.

メモリリークってのは,たとえば全オブジェクトが既に到達不能になっている
にも関わらず,プログラマーがdelete()を忘れたために永久にメモリを消費し
続ける現象です.到達可能な「現在活動中」のオブジェクトの領域が解放でき
ないのは,言語に関係なく当然のことです.

>C++はGCの持ち合わせ
>はないけれど、new/deleteを差し替えられるから取得/解放のログみたいなの
>を取るとか、取得失敗にみせかけることだってできる…とかなんとか
C++だってnewばかりしてdelete()せず,全部の参照(ポインタ)を保持
してたら,メモリをじわじわと食い潰して当然ですね.C++では全部の
参照を上書きしてさえも,じわじわとメモリを食い潰すのが問題なんです.


なお,Javaの様にGCのある言語では,生きているオブジェクトが増えてじわじわと
メモリ消費が増えていっても,最悪それらのオブジェクトへの参照を元から断てば,
(上書きしたり,スコープから外れたりすれば)後はGCが勝手に回収してくれます.
参照関係が複雑であればあるほど,稼働時間が長くなればなるほど,信頼性や安定性
が重視されればされるほど,このメリットが効いて来ます.

-- 
村山敏清 株式会社ネットジーン 〒164-0001 
東京都中野区中野3-33-3 インツ中野ビル 5F
E-mail:murayama@....jp 
TEL:(03)5328-3670 FAX:(03)5328-3673
http://www.netgene.co.jp/