次の方法で共有


<allocators>

割り当てることができるメモリはノード ベース コンテナーの間ブロック各種テンプレートを定義します。

#include <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>で定義されたテンプレート アロケータークラスを提供します。 <アロケーターの> ヘッダーは次のアロケーターを提供し、T:

次のコード例などのコンテナーを作成した場合、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 別の呼び出しを行う必要はありません。 これは、以降の再割り当ての大きなキャッシュによって解放されるブロックからなど、suballocate 可能性があります。

再コンパイルできないをコンパイラによってテンプレートではない、キャッシュのメンバー関数に渡された引数の_Sz 値の割り当てと解放するときインスタンス化されたか std::size_t の引数の値が使用されます。

<アロケーターは> 次のキャッシュ テンプレートを提供し、T:

フィルターは、テンプレート引数として渡された別のブロックのアロケーターを使用してメンバー関数を実装するブロックのアロケーターです。 フィルターの一般的なフォームは別のブロックのインスタンスのメンバー関数のアクセス制御に同期ポリシーを適用する同期フィルターです。<アロケーターは> 次の同期フィルターを提供し、T:

<アロケーターは> 複数のブロックのアロケーターをインスタンスに、コンパイル時ではなく実行時に割り当てや解放として使用されるインスタンスをを保持するフィルター rts_allocを提供します。 これは再コンパイルできないをコンパイラで使用されます。

同期ポリシーはどのようにアロケーターのインスタンス ハンドル複数のスレッドから同時に割り当ておよび解放の要求を判断します。 最も単純なポリシーは同期管理を離れたユーザーへの基になるキャッシュ オブジェクトに対するすべての要求を直接渡すことです。 より複雑なポリシーは、基になるキャッシュ オブジェクトへのアクセスをシリアル化するには、ミューテックスを使用することができます。

コンパイラはコンパイルのシングルスレッドとマルチスレッド アプリケーションの両方をサポートする場合は、シングルスレッド アプリケーションの既定の同期フィルターは sync_none;です 他のすべての場合には sync_sharedです。

キャッシュ テンプレート cache_freelist は空きリストに格納される要素の最大数を決定する最大クラスの引数を受け取ります。

<アロケーターは> 次の最大クラスを提供し、T:

[マクロ]

ALLOCATOR_DECL (<allocators>)

アロケーターのテンプレート クラスについて説明します。

CACHE_CHUNKLIST (<allocators>)

stdext::allocators::cache_chunklist<sizeof(Type)>を紹介します。

CACHE_FREELIST (<allocators>)

stdext::allocators::cache_freelist<sizeof(Type), max>を紹介します。

CACHE_SUBALLOC (<allocators>)

stdext::allocators::cache_suballoc<sizeof(Type)>を紹介します。

SYNC_DEFAULT (<allocators>)

同期フィルターを紹介します。

演算子

operator!= (<allocators>)

指定したクラスのアロケーター オブジェクト間の非等値をテストします。

operator== (<allocators>)

指定したクラスのアロケーター オブジェクト間の等値をテストします。

クラス

allocator_base

同期フィルターからユーザー定義のアロケーターを作成するために必要な基本クラスと共通の機能を定義します。

allocator_chunklist

cache_chunklistのキャッシュを使用してオブジェクトの記憶割振エラーと解放を管理するオブジェクトを表します。

allocator_fixed_size

max_fixed_sizeによって管理される期間の型 cache_freelist のキャッシュを使用して型 Type オブジェクトの記憶割振エラーと解放を管理するオブジェクトを表します。

allocator_newdel

メモリ ブロックと operator new を解放するためにメモリ ブロックを割り当てるに operator delete を使用するアロケーターを実装します。

allocator_suballoc

cache_suballocのキャッシュを使用して型 Type オブジェクトの記憶割振エラーと解放を管理するオブジェクトを表します。

allocator_unbounded

max_unboundedによって管理される期間の型 cache_freelist のキャッシュを使用して型 Type オブジェクトの記憶割振エラーと解放を管理するオブジェクトを表します。

allocator_variable_size

max_variable_sizeによって管理される期間の型 cache_freelist のキャッシュを使用して型 Type オブジェクトの記憶割振エラーと解放を管理するオブジェクトを表します。

cache_chunklist

単一のサイズのメモリ ブロックの割り当てと解放するブロックのアロケーターを定義します。

cache_freelist

単一のサイズのメモリ ブロックの割り当てと解放するブロックのアロケーターを定義します。

cache_suballoc

単一のサイズのメモリ ブロックの割り当てと解放するブロックのアロケーターを定義します。

freelist

メモリ ブロックのリストを管理します。

max_fixed_size

最大クラス オブジェクトを制限する最大固定長に freelist オブジェクトについて説明します。

max_none

最大クラス オブジェクトをゼロに制限の最大長 freelist オブジェクトについて説明します。

max_unbounded

freelist オブジェクトの最大長を制限する最大クラス オブジェクトを表します。

max_variable_size

最大クラス オブジェクトに制限を割り当てられたメモリ ブロック数に厳密に比例した最大長への freelist オブジェクトについて説明します。

rts_alloc

キャッシュ インスタンスの配列を保持する記述し、コンパイル時ではなく実行時に割り当ておよび解放として使用されるインスタンスを決定します rts_alloc テンプレート クラスは フィルター を。

sync_none

同期を行う同期フィルターについて説明します。

sync_per_container

各アロケーター オブジェクトには、別のキャッシュ オブジェクトを提供する同期フィルターについて説明します。

sync_per_thread

スレッドごとに個別のキャッシュ オブジェクトを提供する同期フィルターについて説明します。

sync_shared

すべてのアロケーターで共有されるキャッシュ オブジェクトへのアクセスを制御するミューテックスを使用して同期フィルターについて説明します。

必要条件

ヘッダー: の <アロケーター>

名前空間: stdext

参照

その他の技術情報

C++ 標準ライブラリのヘッダー ファイル