私は、C++ 11のstd :: allocatorの要件を実装し、正常に動作する実行方法として書いたプールアロケータを使用しましたが、 (以下の論文に基づいて)を基準として:固定サイズのチャンクプールアロケータを特定のSTLコンテナに適用する
https://pdfs.semanticscholar.org/4321/a91d635d023ab25a743c698be219edcdb1a3.pdf
は、本当に良い時間でそれに十分な大きさのメモリの1つのブロックに単一のオブジェクトを割り当てるためのものです。
std :: allocatorテンプレートメソッド "allocate"には、STLコンテナが同時に割り当てるブロックの数を要求できるパラメータがあります。たとえば、std :: basic_stringのように見えますが、スタック上に保持されている特定のサイズの文字列を超えると、アロケータから連続したメモリブロックを要求することによって、char配列を格納するのに十分な大きさのメモリを一度にヒープに移動します文字列全体を保持します。 std :: vectorの動的拡張も同様の方法で動作するようです。
このタイプのSTLコンテナにテンプレート化されている型のサイズを固定サイズのチャンクを返すように設計したアロケータを適用する方法はありますか?
標準アロケータは、テンプレート化された型の指定された数のアイテムに対して連続した記憶域を割り当てることができる必要があります。 –
あなたは(オプションの)メンバ 'size_type max_size()'を提供でき、違反時にスローします – Caleth