スレッドメモ
MLやNewsのスレッドをメモする試み。
2004-01-30 (金)
◆ [XP-jp] JaSST'04
[04846] FUKUDA Fumiki (1/30)
>あと、SandBoxな話でJavaのメモリ管理が見えないということの弊害
>についてもお伺いしましたっけ。そゆのもあったですね。JavaはGC持ってるからメモリ・リークがない、 なんて考えてたら大間違いで、誰かが捕まえて離さないとぢわぢわメモリ を食い潰し…てな事態は決してレア・ケースじゃない。C++はGCの持ち合わせ はないけれど、new/deleteを差し替えられるから取得/解放のログみたいなの を取るとか、取得失敗にみせかけることだってできる…とかなんとか
[04847] Kenji HIRANABE (1/30)
便乗質問。(最近C++から離れているもので。。。)
new/delete の置き換えによって、GCを実現できるのでしょうか?そういう、ライブラリあるのですかね?
あと、そのライブラリに置き換えてリンクするだけで、既存コードをまったくいじらなくて(再コンパイルもなし)GC対応ってできるのでしょうか?
[04848] FUKUDA Fumiki (1/30)
なにやらできるみたいですよん。
[04849] Shibukawa Yoshiki (1/30)
newで作ったオブジェクトのポインタをstd::auto_ptrとかboost::shared_ptrとかのスマートポインタで受け取るようにすれば、参照カウント式のGCができます。簡易的ですが。マーク&スイープ方式のようにメモリ空間を探索する手間がなくて、パフォーマンス劣化も少ないのでC++向きかと思います。
[04852] Murayama Toshikiyo (1/30)
C++で保守的GCが使われるのは,言語の制約で,こういうのくらいしか使えるGCがないためです.
[04856] Shibukawa Yoshiki (1/31)
Cでも型情報を持っていて色々やるコードというのはあります。SWIGなんかもそうです。SWIGの場合はスクリプト言語とC/C++コードのコミュニケーションのために持っているのであってGCのためではないですけど。あとはスマートポインタの類も型情報を持っているからこそ参照カウントで消せるといえると思います。
[04866] Murayama Toshikiyo (2/2)
「型情報を手作業で付けることができる」というだけでしょ?Cのランタイムにはそういう機能はありません.
[04867] Shibukawa Yoshiki (2/2)
JavaのC++に対するメリットって「リッチな中間層」で提供されているものですよね。中間層を増やして柔軟性と機能を追加していくのがソフトウェアの基本的性質なら、C++はパフォーマンスのためにあえてその辺りを全部とっぱらった言語と言えます。
exact GCだって、newしたオブジェクトを全部shared_ptrに格納すればできるんですから。タイプ数はちょっと多くなりますけど。
[04873] Susumu YAMAZAKI (2/2)
言語処理系レベルの最適化ということを考えますと,必ずしも C++ 流の方法が性能がよいとは一概には言えません.全部 shared_ptr を使った C++ と,Java とでは,恐らく Java の方が性能がよいでしょう.Java はメモリモデルが単純で GC が全てで使われるため,最適化の効果が高く最適化の前提条件が立てやすいので,研究が進んだ結果だと言えます.
[04883] UEHARA Junji (2/4)
いっそ、生ポインタを使えない制約と、Objectを自動的に継承するようにサポートするなどの記法(一種の言語のようなもの)を決めて、その記法を通常のC++コードに変換するツール(プリプロセッサ)を作ったらどうでしょう。そうだ、いっそ、その記法として「Java」を採用したらよろしいのでは。当然GC等もサポートします。
# 皮肉です。念のため。