保守的なガベージ コレクションと C 標準ライブラリの統合
質問:
マルチ-スレッド化された C アプリケーションでは、Boehm の保守的なガベージ コレクター (GC) を C 標準ライブラリと組み合わせて効果的に利用できますか?具体的には、演算子 ::new と、std::vector および std::string によって提供されるアロケーターはどのように処理されるべきですか?
答え:
1. Operator ::new:
の再定義 Boehm の GC を使用した ::operator new の再定義は必要ありません。 Boehm の GC を適切に利用することで、::operator new.
2 を明示的に再定義することを避けることができます。標準ライブラリ コンテナのアロケータ:
std::vector:
std::string:
例:
次のコードは、GC 割り当てベクトルのカスタム実装を示しています。
<code class="cpp">#include <gc/gc_cpp.h> #include <gc/gc_allocator.h> #include <vector> class Myvec { std::vector<int, gc_allocator<int>> _vec; public: Myvec(size_t sz = 0) : _vec(sz) {} // ... (rest of class implementation) };</code>
3. g との互換性:
はい、 g でコンパイルされたアプリケーションで Boehm GC を使用することができます。 GC を標準ライブラリと効果的に統合するには、上記のガイドラインに従ってください。
付録 (2017 年 1 月):
以上がBoehm の保守的なガベージ コレクターは、マルチスレッド アプリケーション用の C 標準ライブラリと統合できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。