ホームページ  >  記事  >  バックエンド開発  >  Boehm のガベージ コレクターを C 標準ライブラリで使用するにはどうすればよいですか?

Boehm のガベージ コレクターを C 標準ライブラリで使用するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-25 06:29:02294ブラウズ

How Can I Use Boehm's Garbage Collector with the C   Standard Library?

C 標準ライブラリでの Boehm ガベージ コレクターの使用

Boehm の保守的なガベージ コレクターを利用するマルチスレッド C アプリケーションを開発するには、次の手順を実行します。考慮すべきアプローチはいくつかあります。

1.演算子 ::new:

の再定義 1 つのオプションは、グローバル演算子 ::new をベームのバージョンとして再定義することです。ただし、このアプローチは他のライブラリ コンポーネントに干渉する可能性があるため、通常はお勧めできません。

2.明示的アロケータの使用:

または、Boehm の gc_allocator テンプレートを STL コレクション クラスで利用できます。明示的なアロケーターは、割り当てに使用されるメモリ マネージャーを指定し、内部データと STL コンテナーの個々の要素の両方が GC 割り当てされるようにすることができます。

3.カスタム コレクションの作成:

よりカスタマイズされたソリューションの場合は、STL テンプレート クラスに基づいてカスタム コレクションを作成しますが、アロケーター テンプレート引数として gc_allocator を使用します。これにより、Boehm の GC_malloc_atomic 関数を使用して、std::string などの STL コンテナの内部配列を割り当てることができます。

4。 std::string:

std::string の内部データを GC 割り当てするには、gc_allocator で Basic_string テンプレートを使用して独自の文字列を定義できます。演算子 [] をオーバーライドすると、内部 char バッファにアクセスし、GC_malloc_atomic.

5 を使用してそれを割り当てることができます。 g に関する潜在的な問題:

Boehm の GC は時間の経過とともに安定性が向上しましたが、 g によってコンパイルされた複雑なアプリケーションでの使用はまだ推奨されない可能性があります。ただし、gc_allocator を利用する提供された例 (myvec.cc) は、プレーンな malloc または ::operator new を使用しなくても正常にコンパイルされます。 C 11 標準には、 を介したガベージ コレクションのサポートが含まれています。 ヘッダー。ただし、これらの機能は、GCC や Clang などの広く使用されているコンパイラーではまだ完全には実装されていません。

以上がBoehm のガベージ コレクターを C 標準ライブラリで使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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