Compartilhar via


<allocators>

Define vários modelos que ajudam a alocar e liberar blocos de memória para o contêiner baseados.

#include <allocators>

Comentários

<O cabeçalho> de alocadores fornece seis modelos do alocador que podem ser usados para selecionar estratégias de gerenciamento de memória para o contêiner baseados. Para uso com esses modelos, também fornece vários filtros diferentes de sincronização para personalizar a estratégia de gerenciamento de memória a uma variedade de esquemas diferentes de multithreading (que não incluem nenhum). Corresponder a uma estratégia de gerenciamento de memória os padrões conhecidos uso de memória, e requisitos de sincronização, de um aplicativo específico pode frequentemente aumentar a velocidade ou reduzir os requisitos de memória total de um aplicativo.

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

Os contêineres conjunto de nós com base 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 para um tipo específico do contêiner são do mesmo tamanho, a flexibilidade de um gerenciador de memória de uso geral não é necessária. Como o tamanho de cada bloco de memória é conhecido em tempo de compilação, o gerenciador de memória poderá ser muito mais simples e mais rapidamente.

Quando usados com um contêiner que não se baseiam (como o std::deque de std::vector contêineres de biblioteca padrão, C++ e std::basic_string), modelos de alllocator funcionará corretamente, mas não poderão fornecer nenhuma melhoria de desempenho sobre o alocador padrão.

Um alocador é uma classe do modelo que descreve um objeto que gerencia a alocação de armazenamento e se liberar para objetos e matrizes de objetos de um tipo designado. Os objetos do alocador são usados por várias classes de modelo do contêiner na biblioteca padrão C++.

Os alocadores em todos os modelos desse tipo:

template<class Type>

class allocator;

onde o argumento Type do modelo é o tipo gerenciado pela instância do alocador. A biblioteca padrão do C++ fornece um alocador padrão, a classe alocadordo modelo, que é definida em <memory>. <O cabeçalho> de alocadores alocadores fornece os seguintes:

Use uma instanciação apropriado de um alocador como o segundo argumento do tipo ao criar um contêiner, como o seguinte exemplo de código.

#include <list>

#include <allocators>

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

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

Use a macro ALLOCATOR_DECL (<allocators>) para criar modelos do alocador com filtros de sincronização diferentes da opção:

#include <list>

#include <allocators>

ALLOCATOR_DECL(CACHE_CHUNKLIST, stdext::allocators::sync_per_thread, Alloc);

std::list<int, alloc<int> > _List1;

_Lst1 atribui nós com allocator_chunklist e o filtro de sincronização de synchronization_per_thread .

Um alocador do bloco é um cache ou um filtro. Um cache é uma classe do modelo que usa um argumento de std::size_t do tipo. Define um alocador do bloco que aloque e desaloque blocos de memória de um único tamanho. Deve obter a memória usando o operador new, mas não precisa fazer uma ligação separada para o operador new para cada bloco. Pode, por exemplo, suballocate de um bloco maior ou mais blocos desalocados cache para redistribuição subsequente.

Com um compilador que não pode criar reassociar o valor do argumento de std::size_t usado quando o modelo foi criado uma instância não é necessariamente o valor de _Sz de argumento passou para funções de membro de um cache de atributo e desalocam.

<os alocadores> fornecem os seguintes modelos de cache:

Um filtro é um alocador do bloco que implementa as funções de membro usando outro alocador do bloco que ele é passado como um argumento do modelo. A maioria de forma 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 do bloco. <os alocadores> fornecem os seguintes filtros de sincronização:

<os alocadores> também fornecem o filtro rts_alloc, que mantém o alocador do bloco várias instâncias e determina qual instância a ser usada para alocação ou desalocação em tempo de execução em vez de em tempo de compilação. É usado com compiladores que não podem criar reassociações.

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

Se um compilador da suporte à criação de thread único e aplicativos multi-threaded, o filtro padrão de sincronização para aplicativos de thread único é sync_none; para todos os outros casos é sync_shared.

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

<os alocadores> fornecem as seguintes classes mínima:

Macros

ALLOCATOR_DECL (<allocators>)

Gerencie uma classe do modelo do alocador.

CACHE_CHUNKLIST (<allocators>)

Gerencie stdext::allocators::cache_chunklist<sizeof(Type)>.

CACHE_FREELIST (<allocators>)

Gerencie stdext::allocators::cache_freelist<sizeof(Type), max>.

CACHE_SUBALLOC (<allocators>)

Gerencie stdext::allocators::cache_suballoc<sizeof(Type)>.

SYNC_DEFAULT (<allocators>)

Gerencie um filtro de sincronização.

Operadores

operator!= (<allocators>)

Testes de desigualdade entre objetos do alocador de uma classe especificada.

operator== (<allocators>)

Testes de igualdade entre objetos do alocador de uma classe especificada.

Classes

allocator_base

Define as funções da classe base e comum 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 se liberar para objetos que usam um cache de tipo cache_chunklist.

allocator_fixed_size

Descreve um objeto que gerencia a alocação de armazenamento e se liberar para objetos de tipo Type usando um cache de tipo cache_freelist com um comprimento gerenciado por max_fixed_size.

allocator_newdel

Implementa um alocador que usa operator delete para desalocar um bloco e operator new de memória para alocar um bloco de memória.

allocator_suballoc

Descreve um objeto que gerencia a alocação de armazenamento e se liberar para objetos de tipo Type usando um cache de tipo cache_suballoc.

allocator_unbounded

Descreve um objeto que gerencia a alocação de armazenamento e se liberar para objetos de tipo Type usando um cache de tipo cache_freelist com um comprimento gerenciado por max_unbounded.

allocator_variable_size

Descreve um objeto que gerencia a alocação de armazenamento e se liberar para objetos de tipo Type usando um cache de tipo cache_freelist com um comprimento gerenciado por max_variable_size.

cache_chunklist

Define um alocador do bloco que aloque e desaloque blocos de memória de um único tamanho.

cache_freelist

Define um alocador do bloco que aloque e desaloque blocos de memória de um único tamanho.

cache_suballoc

Define um alocador do bloco que aloque e desaloque blocos de memória de um único tamanho.

freelist

Gerencia uma lista de blocos de memória.

max_fixed_size

Descreve um objeto máximo da classe que limita um objeto de freelist a um comprimento máximo fixo.

max_none

Descreve um objeto máximo da classe que limita um objeto de freelist a um comprimento máximo de zero.

max_unbounded

Descreve um objeto máximo da classe que não limite o tamanho máximo de um objeto de freelist .

max_variable_size

Descreve um objeto máximo da classe que limita um objeto de freelist o comprimento máximo que é aproximadamente proporcional ao número de blocos de memória alocado.

rts_alloc

A classe do modelo de rts_alloc descreve filtro que contém uma matriz de instâncias do cache e determina qual instância a ser usada para a alocação e a desalocação em tempo de execução em vez de em tempo de compilação.

synchronization_none

Descreve um filtro de sincronização que não fornece nenhuma sincronização.

synchronization_per_container

Descreve um filtro de sincronização que fornece um objeto separado de cache para cada objeto do alocador.

synchronization_per_thread

Descreve um filtro de sincronização que fornece um objeto separado de cache para cada thread.

synchronization_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

alocadores <deCabeçalho: >

Namespace: stdext

Consulte também

Outros recursos

Arquivos de cabeçalho da Biblioteca Padrão C++