<allocators>

Define vários modelos que ajudam a alocar e liberar os blocos de memória para contêineres baseados em nó.

Sintaxe

#include <allocators>

Observação

<os alocadores são preteridos>, começando com Visual Studio versão 16.3 de 2019.

Comentários

O <cabeçalho de alocadores> fornece seis modelos de alocador que podem ser usados para selecionar estratégias de gerenciamento de memória para contêineres baseados em nó. Para usar com esses modelos, ele também fornece vários filtros de sincronização diferentes para personalizar a estratégia de gerenciamento de memória para uma variedade de diferentes esquemas de multithreading (incluindo nenhum). Você pode acelerar seu aplicativo ou reduzir seus requisitos de memória, correspondendo a uma estratégia de gerenciamento de memória com seus padrões de uso de memória e requisitos de sincronização.

Os modelos de alocadores são implementados com componentes reutilizáveis que podem ser personalizados ou substituídos para fornecer estratégias adicionais de gerenciamento de memória.

Os contêineres baseados em nó na Biblioteca Padrão C++ (std::list, std::set, std::multiset, std::map e std::multimap) armazenam seus elementos em nós individuais. Todos os nós de um tipo de contêiner específico têm o mesmo tamanho, portanto, não é necessário ter a flexibilidade de um gerenciador de memória de uso geral. Como o tamanho de cada bloco de memória é conhecido no tempo de compilação, o gerenciador de memória pode ser muito mais simples e rápido.

Quando usados com contêineres que não são baseados em nó (como os contêineres da Biblioteca Padrão C++ std::vector std::d eque e std::basic_string), os modelos do alocador funcionarão corretamente, mas não provavelmente fornecerão qualquer melhoria de desempenho sobre o alocador padrão.

Um alocador é um modelo de classe que descreve um objeto que gerencia a alocação de armazenamento e a liberação para objetos e matrizes de objetos de um tipo designado. Os objetos de alocador são usados por vários modelos de classe de contêiner na Biblioteca Padrão C++.

Os alocadores são todos os modelos deste tipo:

template<class Type>
class allocator;

em que o argumento de modelo Type é do tipo gerenciado pela instância do alocador. A Biblioteca Padrão do C++ fornece um alocador padrão, alocador de modelo de classe, que é definido na <memória>. O <cabeçalho de alocadores> fornece os seguintes alocadores:

Use uma criação de instância apropriada de um alocador como o segundo argumento de tipo ao criar um contêiner, como o exemplo de código a seguir.

#include <list>
#include <allocators>
std::list<int, stdext::allocators::allocator_chunklist<int> > _List0;

_List0 aloca nós com allocator_chunklist e o filtro de sincronização padrão.

Use a macro ALLOCATOR_DECL para criar modelos de alocadores com filtros de sincronização diferentes do padrão:

#include <list>
#include <allocators>
ALLOCATOR_DECL(CACHE_CHUNKLIST, stdext::allocators::sync_per_thread, Alloc);
std::list<int, alloc<int> > _List1;

_Lst1 aloca nós com allocator_chunklist e o filtro de sincronização sync_per_thread.

Um alocador de blocos é um cache ou um filtro. Um cache é um modelo de classe que usa um argumento do tipo std::size_t. Ele define um alocador de blocos que aloca e desaloca os blocos de memória de um único tamanho. Ele deve obter memória usando o operador new, mas não precisa fazer uma chamada separada ao operador new para cada bloco. Ele pode, por exemplo, subalocar de um bloco maior ou armazenar em cache os blocos desalocados para uma próxima realocação.

Com um compilador que não pode rebinar o valor do argumento std::size_t usado quando o modelo foi instanciado não é necessariamente o valor do argumento _Sz passado para as funções membro de um cache alocar e desalocar.

<Os alocadores fornecem os seguintes> modelos de cache:

Um filtro é um alocador de blocos que implementa suas funções de membro usando outro alocador de blocos, que é passado para ele como um argumento de modelo. A forma mais comum de filtro é um filtro de sincronização, que aplica uma política de sincronização para controlar o acesso às funções de membro de uma instância de outro alocador de blocos. <Os alocadores fornecem os seguintes> filtros de sincronização:

<Os alocadores> também fornecem o filtro rts_alloc, que contém várias instâncias do alocador de blocos e determina qual instância usar para alocação ou desalocação em runtime, em vez de em tempo de compilação. Ele é usado com os compiladores que não podem compilar reassociação.

Uma política de sincronização determina como uma instância de alocador manipula solicitações simultâneas de alocação e desalocação de vários threads. A política mais simples é passar todas as solicitações diretamente para o objeto de cache subjacente, deixando o gerenciamento de sincronização para o usuário. Uma política mais complexa poderia ser usar um mutex para serializar o acesso ao objeto de cache subjacente.

Se um compilador der suporte à compilação de aplicativos de single-threaded e multi-threaded, o filtro de sincronização padrão para aplicativos de single-threaded será sync_none, para todos os outros casos, será sync_shared.

O modelo de cache_freelist cache usa um argumento de classe máxima, que determina o número máximo de elementos a serem armazenados na lista gratuita.

<Os alocadores fornecem as seguintes> classes máximas:

Macros

Macro Descrição
ALLOCATOR_DECL Gera um modelo de classe de alocador.
CACHE_CHUNKLIST Produz stdext::allocators::cache_chunklist<sizeof(Type)>.
CACHE_FREELIST Produz stdext::allocators::cache_freelist<sizeof(Type), max>.
CACHE_SUBALLOC Produz stdext::allocators::cache_suballoc<sizeof(Type)>.
SYNC_DEFAULT Produz um filtro de sincronização.

Operadores

Operador Descrição
operator!= (<alocadores>) Testa a desigualdade entre objetos do alocador de uma classe especificada.
operator== (<alocadores>) Testa a igualdade entre objetos do alocador de uma classe especificada.

Classes

Classe Descrição
allocator_base Define a classe base e as funções comuns necessárias para criar um alocador definido pelo usuário de um filtro de sincronização.
allocator_chunklist Descreve um objeto que gerencia a alocação de armazenamento e a liberação de objetos usando um cache do tipo cache_chunklist.
allocator_fixed_size Descreve um objeto que gerencia a alocação e a liberação de armazenamento para objetos do tipo Type usando um cache do tipo cache_freelist com um comprimento gerenciado por max_fixed_size.
allocator_newdel Implementa um alocador que usa a exclusão do operador para desalocar um bloco de memória e um operador novo para alocar um bloco de memória.
allocator_suballoc Descreve um objeto que gerencia a alocação e a liberação de armazenamento para objetos do tipo Type usando um cache do tipo cache_suballoc.
allocator_unbounded Descreve um objeto que gerencia a alocação e a liberação de armazenamento de objetos do tipo Type, usando um cache do tipo cache_freelist com um comprimento gerenciado por max_unbounded.
allocator_variable_size Descreve um objeto que gerencia a alocação e a liberação de armazenamento para objetos do tipo Type, usando um cache do tipo cache_freelist com um comprimento gerenciado por max_variable_size.
cache_chunklist Define um alocador de blocos que aloca e desaloca os blocos de memória de um único tamanho.
cache_freelist Define um alocador de blocos que aloca e desaloca os blocos de memória de um único tamanho.
cache_suballoc Define um alocador de blocos que aloca e desaloca os blocos de memória de um único tamanho.
freelist Gerencia uma lista de blocos de memória.
max_fixed_size Descreve um objeto da classe max que limita um objeto freelist a um comprimento máximo fixo.
max_none Descreve um objeto da classe max que limita um objeto freelist a um comprimento máximo igual a zero.
max_unbounded Descreve um objeto da classe max que não limita o comprimento máximo de um objeto freelist.
max_variable_size Descreve um objeto da classe max que limita um objeto freelist a um comprimento máximo aproximadamente proporcional ao número de blocos de memória alocados.
rts_alloc O modelo de classe rts_alloc descreve um filtro que contém uma matriz de instâncias de cache e determina qual instância usar para alocação e desalocação em runtime, em vez de em tempo de compilação.
sync_none Descreve um filtro de sincronização que não fornece nenhuma sincronização.
sync_per_container Descreve um filtro de sincronização que fornece um objeto de cache separado para cada objeto alocador.
sync_per_thread Descreve um filtro de sincronização que fornece um objeto de cache separado para cada thread.
sync_shared Descreve um filtro de sincronização que usa um mutex para controlar o acesso a um objeto de cache que é compartilhado por todos os alocadores.

Requisitos

Cabeçalho:< Allocators>

Namespace: stdext

Confira também

Referência de Arquivos de Cabeçalho