「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Boehm ガベージ コレクターを「std::vector」や「std::string」などの C++ 標準ライブラリ クラスと統合するにはどうすればよいですか?

Boehm ガベージ コレクターを「std::vector」や「std::string」などの C++ 標準ライブラリ クラスと統合するにはどうすればよいですか?

2024 年 11 月 8 日に公開
ブラウズ:626

How to Integrate Boehm Garbage Collector with C   Standard Library Classes Like `std::vector` and `std::string`?

C 標準ライブラリでベーム ガベージ コレクターを使用する

マルチスレッド C アプリケーションを開発する場合、ベームの保守的なガベージ コレクターはメモリを簡素化するのに役立ちます管理。これにより、Boehm GC を std::map や std::vector などの C 標準ライブラリのクラスとどのように統合するかという問題が生じます。

1 つのアプローチには、Boehm の実装を使用するためにグローバル演算子 ::new を再定義することが含まれます。ただし、より簡単な解決策は、標準ライブラリ コレクション テンプレートでアロケーター テンプレート引数を明示的に指定することです。

たとえば、整数のベクトルを GC 割り当てするには、次を使用できます。

std::vector> my_vector;

std::vector の 2 番目のテンプレート引数個々の要素ではなく、ベクトルの内部データ構造の割り当てを制御するために使用されます。

std::string の場合、gc_allocator で Basic_string を使用することはオプションです:

std::basic_string, gc_allocator> my_string;

代わりに、GC_malloc_atomic.

を使用して文字の配列を直接提供することもできます。要約すると、std::vector、std::string、およびその他の標準ライブラリ クラスで Boehm GC を使用することは次のようになります。 gc_allocator テンプレート引数を指定することで可能になります。演算子 ::new を再定義する必要はありません。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3