<allocators>
ノード ベース コンテナーのメモリ ブロックの割り当てと解放を行うための各種テンプレートを定義します。
#include <allocators>
解説
<allocators> ヘッダーはノード ベース コンテナーの管理方法を選択するために使用できる 6 種類のアロケーター テンプレートが用意されています。これらのテンプレートで使用するために、さまざまなマルチスレッドの設定に管理方法を同期するいくつかの異なる同期フィルターを提供します (を含むなし)。既知のメモリの使用パターンにメモリ管理の方法、および特定のアプリケーションの同期の条件と一致することがよくあります。速度を向上するか、アプリケーション全体の必要なメモリ量を減らすことができます。
アロケーターのテンプレートは、追加の管理方法を提供するためにカスタマイズするか、または置換できる再利用可能なコンポーネントによって実装されます。
標準 C++ ライブラリ (std::list、std::set、std::multiset、std::map と std::multimap) のノード ベース コンテナーは、個々のノードで要素が格納されます。特定のコンテナー型のすべてのノードは同じサイズです。つまり、汎用のメモリ マネージャーの柔軟性は必要ではありません。各メモリ ブロックのサイズがコンパイル時に判明しているため、メモリ マネージャーは方がはるかに簡単です。
ノード ベースではないコンテナーによって使用された場合 (標準 C++ ライブラリのコンテナーの std::vector の std::deque と std::basic_string など)、alllocator テンプレートは正しく動作しますが、既定のアロケーターよりもパフォーマンスが向上するため、耐えられないでしょう。
アロケーターは、指定した型のオブジェクトとオブジェクト配列のストレージ割り当ておよび解放を管理するオブジェクトを記述するテンプレート クラスです。アロケーター オブジェクトは標準 C++ ライブラリで複数のコンテナー テンプレート クラスによって使用されます。
アロケーターは、この型のすべてのテンプレートです:
template<class Type>
class allocator;
テンプレートの引数 Type がアロケーターのインスタンスで型のマネージ実行します。標準 C++ ライブラリは既定のアロケーター、<memory>で定義されているテンプレート クラス アロケーターを提供します。<allocators> ヘッダーは次のアロケーターが用意されています:
次のコード例のようなコンテナーを作成する場合は、2 番目の型引数としてアロケーターの適切なインスタンス化を使用します。
#include <list>
#include <allocators>
std::list<int, stdext::allocators::allocator_chunklist<int> > _List0;
_List0 は allocator_chunklist および既定の同期フィルターを持つノードを割り当てます。
既定以外の同期フィルターを持つアロケーターのテンプレートを作成するに ALLOCATOR_DECL (<allocators>) マクロの使用:
#include <list>
#include <allocators>
ALLOCATOR_DECL(CACHE_CHUNKLIST, stdext::allocators::sync_per_thread, Alloc);
std::list<int, alloc<int> > _List1;
_Lst1 は allocator_chunklist との同期 sync_per_thread フィルターを持つノードを割り当てます。
ブロックのアロケーターはキャッシュまたはフィルターです。キャッシュは、型の std::size_t の 1 個の引数を受け取るテンプレート クラスです。これは、一つのサイズのメモリ ブロックを割り当ておよび解放するブロックのアロケーターを定義します。これは、演算子を使用してメモリを取得する必要があります newがブロックごとの演算子に new 別の呼び出しを行う必要はありません。これは、以降の再割り当ての大きいキャッシュで解放されたブロックからたとえば、小さな場合があります。
を再コンパイルできないコンパイラでテンプレートではありません。キャッシュのメンバー関数に渡された引数の値 _Sz の割り当ておよび解放するためにインスタンス化したときに std::size_t の引数の値が使用されます。
<allocators> は、次のキャッシュ テンプレートが用意されています:
フィルターは、テンプレートの引数として渡された別のブロックのアロケーターを使用してメンバー関数を実装するブロックのアロケーターです。フィルターの一般的なフォームは別のブロックのアロケーターのインスタンスのメンバー関数へのアクセスを制御するために同期ポリシーを適用する同期フィルターです。<allocators> は、次の同期フィルターが用意されています:
<allocators> は、複数のブロックのアロケーターを、インスタンスではなくコンパイル時または実行時に割り当てや解放として使用されるインスタンスを決定するフィルターを rts_allocを提供します。これは、を再コンパイルできないコンパイラによって使用されます。
同期のポリシーは、アロケーターのインスタンス ハンドル、複数のスレッドから同時割り当ておよび解放の要求を判定します。最も単純なポリシーは同期管理を離れたユーザーに基になるキャッシュ オブジェクトに対するすべての要求を直接渡すことです。より複雑なポリシーは、基になるキャッシュ オブジェクトへのアクセスをシリアル化する、ミューテックスを使用することもできます。
コンパイラが単一通され、マルチスレッド コンパイルされたアプリケーションをサポートする場合は、シングルスレッド アプリケーションの既定の同期フィルターはです sync_none; 他のすべてのケースに対して、は sync_sharedです。
キャッシュのテンプレート cache_freelist は、フローティング リストに格納される要素の最大数を決定する最大のクラスの引数を受け取ります。
<allocators> は、次の最大のクラスが用意されています:
マクロ
アロケーター テンプレート クラスを生成します。 |
|
stdext::allocators::cache_chunklist<sizeof(Type)>が発生します。 |
|
stdext::allocators::cache_freelist<sizeof(Type), max>が発生します。 |
|
stdext::allocators::cache_suballoc<sizeof(Type)>が発生します。 |
|
同期フィルターが発生します。 |
演算子
指定のアロケーター クラスのオブジェクトの非等値のテスト。 |
|
指定のアロケーター クラスのオブジェクトの等価性のテスト。 |
Classes
同期フィルターからユーザー定義のアロケーターを作成するために必要な基本クラスと共通の機能を定義します。 |
|
型 cache_chunklistのキャッシュを使用してオブジェクトのストレージ割り当ておよび解放を管理するオブジェクトについて説明します。 |
|
max_fixed_sizeによって管理される長の型 cache_freelist のキャッシュを使用して型 Type のオブジェクトに対するストレージの割り当ておよび解放を管理するオブジェクトについて説明します。 |
|
メモリ ブロックと operator new を解放するためにメモリ ブロックを割り当てるに operator delete を使用するアロケーターを実装します。 |
|
型 cache_suballocのキャッシュを使用して型 Type のオブジェクトに対するストレージの割り当ておよび解放を管理するオブジェクトについて説明します。 |
|
max_unboundedによって管理される長の型 cache_freelist のキャッシュを使用して型 Type のオブジェクトに対するストレージの割り当ておよび解放を管理するオブジェクトについて説明します。 |
|
max_variable_sizeによって管理される長の型 cache_freelist のキャッシュを使用して型 Type のオブジェクトに対するストレージの割り当ておよび解放を管理するオブジェクトについて説明します。 |
|
単一のサイズのメモリ ブロックを割り当ておよび解放するブロックのアロケーターを定義します。 |
|
単一のサイズのメモリ ブロックを割り当ておよび解放するブロックのアロケーターを定義します。 |
|
単一のサイズのメモリ ブロックを割り当ておよび解放するブロックのアロケーターを定義します。 |
|
メモリ ブロックのリストを管理します。 |
|
最大のクラス オブジェクトを制限する最大固定長のオブジェクトへの freelist ついて説明します。 |
|
最大のクラス オブジェクトを制限するゼロの最大長のオブジェクトへの freelist ついて説明します。 |
|
freelist のオブジェクトの最大長を超えない最大のクラス オブジェクトを表します。 |
|
最大のクラス オブジェクトを、マージン割り当てられたメモリ ブロックの数に比例したほぼ最大長のオブジェクトへの freelist ついて説明します。 |
|
キャッシュ インスタンスの配列を保持するかについて説明し、コンパイル時ではなく実行時に割り当てと解放に使用するインスタンスが決まります rts_alloc テンプレート クラスは、を フィルター。 |
|
同期を提供する同期フィルターについて説明します。 |
|
各アロケーター オブジェクトには、それぞれのキャッシュ オブジェクトを提供する同期フィルターについて説明します。 |
|
各スレッドは、別のキャッシュ オブジェクトを提供する同期フィルターについて説明します。 |
|
すべてのアロケーターで共有されるキャッシュ オブジェクトへのアクセスを制御するには、ミューテックスを使用する同期フィルターについて説明します。 |
必要条件
ヘッダー: <allocators>
名前空間: の stdext