ホームページ  >  記事  >  バックエンド開発  >  Boehm の保守的なガベージ コレクターは、マルチスレッド アプリケーション用の C 標準ライブラリと統合できますか?

Boehm の保守的なガベージ コレクターは、マルチスレッド アプリケーション用の C 標準ライブラリと統合できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-26 16:28:30466ブラウズ

Can Boehm's Conservative Garbage Collector Be Integrated with the C   Standard Library for Multi-threaded Applications?

保守的なガベージ コレクションと C 標準ライブラリの統合

質問:

マルチ-スレッド化された C アプリケーションでは、Boehm の保守的なガベージ コレクター (GC) を C 標準ライブラリと組み合わせて効果的に利用できますか?具体的には、演算子 ::new と、std::vector および std::string によって提供されるアロケーターはどのように処理されるべきですか?

答え:

1. Operator ::new:

の再定義 Boehm の GC を使用した ::operator new の再定義は必要ありません。 Boehm の GC を適切に利用することで、::operator new.

2 を明示的に再定義することを避けることができます。標準ライブラリ コンテナのアロケータ:

std::vector:

  • 明示的なアロケータ パラメータを Boehm の gc_allocator に設定して std::vector を使用します。これにより、内部データ構造と個々の要素の両方が GC 割り当てされることが保証されます。

std::string:

  • To GC-allocate内部文字配列を使用するには、std::basic_string から派生した独自のカスタム文字列実装を使用し、gc_allocator を使用します。
  • 標準実装では、文字配列に GC_malloc_atomic 割り当てを強制する簡単な方法はありません。

例:

次のコードは、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 月):

  • 提案 n2670 と を確認してください。 C のガベージ コレクション機能の将来の拡張の可能性のためのガベージ コレクションのサポート。

以上がBoehm の保守的なガベージ コレクターは、マルチスレッド アプリケーション用の C 標準ライブラリと統合できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。