村山です.
> >便乗質問。(最近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/