2009-08-04 10 views
1

誰もAppleのautozone garbage collectorを使用しようとしましたか?または、C++で使用可能な適切で設定可能なものを指すことができますか?AutoZoneガベージコレクタの使用

編集:私は決定ダイアグラム(BDDなど)に取り組んでいます。この場合、ガベージコレクタでメモリを管理するのが効率的かどうかをテストしたいと思います。

編集2:より正確には、意思決定図用のライブラリを実装するときは、ガベージコレクタを実装する必要があります。実際には、私はすでにライブラリのためにこれを行っていましたが、それはコードの多かれ少なかれ25%を占めています。それはもっとも複雑な部分です:-)そうです、私はガベージコレクタを望みます:-)そして、私はすでにRAIIのテクニックを使用しています。最後に、私はshared_ptrのコストを負担することはできません。これは、ガベージコレクションが必要な数十億のオブジェクトを保存するためです。

答えて

1

いいえ私はそれを試していません。あなたはthis、詳しくはhereとお試しください。このコレクターは、Linux、* BSD、最近のWindowsバージョン、MacOS X、HP/UX、Solaris、Tru64、Irixなどのオペレーティングシステムで動作します。

2

ほとんどの人は、C++でガベージコレクタを避ける傾向があります。

、あなたのリソースを管理するためにRAIIを使用することを学ぶ一度彼らは、一般的に必要ではなく、C++は、ガベージコレクションのための適切なサポートを持っていないので、GCの問題のいくつかを持って存在している:

  • 彼らは、彼らは、C++でのGCがある状況があります。もちろん、デストラクタ

で素晴らしいプレーしないことがあり、すべての割り当て(彼らはいくつかの割り当てが参照されているかどうかの保守的な推測をしなければならない)

  • をキャッチしていません有用。しかし、95%の症例では、適切な記憶管理技術(RAII)を自分で学習するだけで、より良い治療を受けることができます。

    私はオートゾーンを使用しておらず、あなたの場合や一般的にどの程度うまく機能しているのか分かりません。

  • 3

    暗黙のガベージコレクションライブラリが本当に必要かどうかは既に分析していますか?あなたはそれが単なるJava(またはObjective C、...)ノスタルジアではないと確信していますか?

    これはC++では自然ではないので、おそらくあなたが解決するよりも多くの問題に遭遇するでしょう。実際の実装は、実験的なテストで主に使用され、実稼働アプリケーションでは使用されません。言語の可能性を絞る最良の方法は、その言語で取り組まれていることを実行することです。

    明示的なガベージコレクション(boost :: shared_ptrとfriends)がニーズをカバーしているかどうか最初にチェックし、可能であれば複雑さを導入しないようにしてください。

    アレクサンドル編集後2:マジックは存在しません私は恐れています。 RAIIのイディオムよりもガベージコレクタが効率的になると思うのはなぜですか?

    参照カウントが不要な場合は、scoped_ptrを使用できます。しかし、あなたがそれを必要とするならば、それをどれだけ隠すかを除けば、あなたはそれを支払わなければならないでしょう。

    おそらく、あなたの問題は、多くのオブジェクトをdinamically割り当てることです。小さなものであれば、 "Modern C++ Design"(Andrei Alexandrescu)の第4章(Small-Object Allocation)に興味があります。

    +0

    ポインタコンテナを見ることもできます。それらはメモリのオーバーヘッドがありません: http://www.boost.org/doc/libs/1_39_0/libs/ptr_container/doc/ptr_container.html –

    +0

    そしてここではSmall Object Allocatorの実装がhttp:// loki-libです。 cvs.sourceforge.net/loki-lib/loki/include/loki/SmallObj.h?view=markup –

    2

    は実際には、ガベージコレクションなど、今後のC++ 20XX標準の一部であったが、実装の難しさの理由のために滴下し、複雑...だから

    、必ず、多くの人々は、C++でGCを避けるため、しかし、標準委員会が積極的に検討しているという強い要望がある。

    AppleのAutoZoneは、C++での使用のために曲げられる言語に依存しないガベージコレクタです。確かに、そのAutoZoneはObjective-C(とC)のためにうまくいくでしょう。

    AutoZoneはMacRubyプロジェクトでも使用されていますが、他にもいくつかのプロジェクトがあります。実装にはx86アーキテクチャとppcアーキテクチャに固有のビットがありますが、移植可能に設計されています。必要に応じて他のCPUタイプに移植する必要があります。

    コレクタ/登録解除オブジェクトと急行の接続などを登録するために直接使用することができるAPIを持っている...

    それは容易ではないだろうが、それは確かになんとかです。

    関連する問題