Compartilhar via


<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

<allocators> foi preterido, a partir do Visual Studio 2019 versão 16.3.

Comentários

O cabeçalho <allocators> fornece seis modelos de alocadores que podem ser usados para selecionar as 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 do 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ó (por exemplo, os contêineres std::vector std::deque e std::basic_string da Biblioteca Padrão do C++), os modelos de alocadores funcionarão corretamente, mas provavelmente não fornecerão nenhuma melhoria de desempenho em relação ao alocador padrão.

Um alocador é um modelo de classe que descreve um objeto que gerencia a alocação e a liberação de armazenamento para objetos e matrizes de objetos de um tipo designado. Os objetos alocadores são usados por vários modelos de classes de contêiner na Biblioteca Padrão do 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, o modelo de classe allocator, que é definida em <memory>. O cabeçalho <allocators> fornece os alocadores a seguir:

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 reassociar, o valor do argumento std::size_t usado quando a instância do modelo foi criada não é necessariamente o valor do argumento _Sz passado para as funções de membro do cache alocar e desalocar.

<allocators> fornece os seguintes modelos de cache:

Um filtro é um alocador de blocos que implementa as 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. <allocators> fornece os seguintes filtros de sincronização:

<allocators> também fornece o filtro rts_alloc, que contém diversas instâncias de alocador de blocos e determina qual instância deve ser usada para alocação ou desalocação no runtime, em vez de no 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 cache_freelist usa um argumento de classe max que determina o número máximo de elementos a serem armazenados na lista livre.

<allocators> fornece as seguintes classes max:

Macros

Macro Descrição
ALLOCATOR_DECL Produz um modelo de classe allocator.
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!= (<allocators>) Testa a desigualdade entre objetos do alocador de uma classe especificada.
operator== (<allocators>) 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 o operador delete para desalocar um bloco de memória e o operador new 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 será usada para alocação e desalocação no runtime, em vez de no 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