Condividi tramite


<allocators>

Definisce diversi modelli che consentono di allocare e liberare blocchi di memoria per i contenitori basati su nodo.

#include <allocators>

Note

L'intestazione di <allocators> sono disponibili sei modelli di allocatore che possono essere utilizzati per selezionare le strategie di gestione della memoria per i contenitori basati su nodo.Per utilizzare con questi modelli, offre vari filtri di sincronizzazione per adattati alla strategia di gestione della memoria varie combinazioni diverse di multithreading (non inclusi).La corrispondenza di una strategia di gestione della memoria nei modelli noti di utilizzo della memoria e i requisiti di sincronizzazione, di una determinata applicazione può aumentare la velocità o ridurre spesso i requisiti di memoria globali di un'applicazione.

I modelli di allocatore vengono distribuiti con componenti riutilizzabili che possono essere personalizzate o sostituire per fornire le strategie di gestione della memoria aggiuntiva.

I contenitori basati su nodi nella libreria C++ standard (std::list, std::set, std::multiset, std::map e std::multimap) archiviano gli elementi in singoli nodi.Tutti i nodi per un determinato tipo di contenitore sono la stessa dimensione, pertanto la flessibilità di un gestore di memoria di utilizzo generale non è necessario.Poiché la dimensione di ciascun blocco di memoria è nota in fase di compilazione, il gestore di memoria può essere molto più semplice e più rapido.

Se utilizzato con i contenitori che non sono basati su nodi (ad esempio lo std::deque di std::vector di contenitori della libreria C++ standard e std::basic_string), i modelli di alllocator funzioneranno correttamente, ma non facciano fornire un miglioramento delle prestazioni sull'allocatore predefinito.

Un allocatore è una classe modello che descrive un oggetto che gestisce l'allocazione di archiviazione e liberare degli oggetti e le matrici di oggetti di un tipo definito.Gli oggetti di un allocatore vengono utilizzati da diverse classi modello del contenitore nella libreria C++ standard.

Gli allocatori sono tutti i modelli di questo tipo:

template<class Type>

class allocator;

nell'argomento di modello Type è il tipo gestito dall'istanza di un allocatore.La libreria C++ standard fornisce un allocatore predefinito, la classe modello allocatore, definita in <memory>.l'intestazione di <allocators> fornisce i seguenti allocatori:

Utilizzare una creazione di istanza appropriata di un allocatore come secondo argomento di tipo quando creano un contenitore, come nell'esempio di codice.

#include <list>

#include <allocators>

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

_List0 alloca nodi con allocator_chunklist e il filtro predefinito di sincronizzazione.

Utilizzare la macro ALLOCATOR_DECL (<allocators>) per creare modelli di allocatore con i filtri di sincronizzazione diverso da quello predefinito:

#include <list>

#include <allocators>

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

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

_Lst1 alloca nodi con allocator_chunklist e il filtro di sincronizzazione synchronization_per_thread.

Un allocatore di blocco è una cache o un filtro.Una cache è una classe modello che accetta un argomento di std::size_t del tipo.Definisce un allocatore di blocco che per allocare e liberare blocchi di memoria di una singola dimensione.Deve ottenere la memoria utilizzando l'operatore new, ma non deve effettuare una chiamata separata all'operatore new per ogni blocco.È possibile, ad esempio, suballocate da un tipo più grande blocco o dai blocchi rilasciati cache di riallocazione successivo.

Con un compilatore che non sia possibile compilare riassociare il valore dell'argomento di std::size_t utilizzato quando il modello è stata creata un'istanza non è necessariamente il valore di _Sz di argomento passato a funzioni membro di una cache allocano e release.

<allocators> fornisce i seguenti modelli di cache:

Un filtro è un allocatore di blocco che implementa le relative funzioni membro utilizzando un altro allocatore di blocco viene passato come argomento di modello.La forma comune del filtro è un filtro di sincronizzazione, che applica i criteri di sincronizzazione per controllare l'accesso alle funzioni membro di un'istanza di un altro allocatore di blocco.<allocators> fornisce i seguenti filtri di sincronizzazione:

<allocators> fornisce anche il filtro rts_alloc, che utilizzi l'allocatore più di blocco l'e determina quale istanza da utilizzare per l'allocazione o la disallocazione in fase di esecuzione anziché in fase di compilazione.Viene utilizzato dai compilatori non è possibile compilare riassociano.

I criteri di sincronizzazione determinano come istanza gestisce richieste simultanee di allocazione e disallocazione di un allocatore da più thread.I criteri più semplici sono di passare direttamente tutte le richieste da all'oggetto cache sottostante, lasciando la gestione di sincronizzazione all'utente.I criteri più complessi possono essere di utilizzare un mutex per serializzare l'accesso all'oggetto cache sottostante.

Se un compilatore supporta la compilazione sia le applicazioni a thread singolo con multithreading, il filtro predefinito dalla sincronizzazione per le applicazioni a thread singolo è sync_none; per tutti gli altri casi è sync_shared.

Il modello cache_freelist della cache accetta un argomento massimo della classe che determina il numero massimo di elementi da memorizzare in free list.

<allocators> sono disponibili le seguenti classi massime:

Ee292134.collapse_all(it-it,VS.110).gifMacro

ALLOCATOR_DECL (<allocators>)

Rende una classe modello di allocatore.

CACHE_CHUNKLIST (<allocators>)

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

CACHE_FREELIST (<allocators>)

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

CACHE_SUBALLOC (<allocators>)

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

SYNC_DEFAULT (<allocators>)

Rende un filtro di sincronizzazione.

Ee292134.collapse_all(it-it,VS.110).gifOperatori

operator!= (<allocators>)

Test disuguaglianza tra gli oggetti di allocatore di una classe specificata.

operator== (<allocators>)

Test di uguaglianza tra gli oggetti di allocatore di una classe specificata.

Ee292134.collapse_all(it-it,VS.110).gifClassi

allocator_base

Definisce le funzioni comuni e della classe base necessarie per creare un allocatore definito da un filtro di sincronizzazione.

allocator_chunklist

Viene descritto un oggetto che gestisce l'allocazione di archiviazione e liberare per oggetti utilizzando una cache di tipo cache_chunklist.

allocator_fixed_size

Viene descritto un oggetto che gestisce l'allocazione di archiviazione e liberare per oggetti di tipo Type utilizzando la cache di un tipo cache_freelist con una lunghezza gestita da max_fixed_size.

allocator_newdel

Implementa un allocatore che utilizza operator delete per rilasciare un blocco di memoria e operator new per allocare un blocco di memoria.

allocator_suballoc

Viene descritto un oggetto che gestisce l'allocazione di archiviazione e liberare per oggetti di tipo Type utilizzando la cache di un tipo cache_suballoc.

allocator_unbounded

Viene descritto un oggetto che gestisce l'allocazione di archiviazione e liberare per oggetti di tipo Type utilizzando la cache di un tipo cache_freelist con una lunghezza gestita da max_unbounded.

allocator_variable_size

Viene descritto un oggetto che gestisce l'allocazione di archiviazione e liberare per oggetti di tipo Type utilizzando la cache di un tipo cache_freelist con una lunghezza gestita da max_variable_size.

cache_chunklist

Definisce un allocatore di blocco che per allocare e liberare blocchi di memoria di una singola dimensione.

cache_freelist

Definisce un allocatore di blocco che per allocare e liberare blocchi di memoria di una singola dimensione.

cache_suballoc

Definisce un allocatore di blocco che per allocare e liberare blocchi di memoria di una singola dimensione.

freelist

Gestisce un elenco dei blocchi di memoria.

max_fixed_size

Viene descritto un oggetto classe massimo che limiti un oggetto freelist a una lunghezza fissa.

max_none

Viene descritto un oggetto classe massimo che limiti un oggetto freelist a una lunghezza massima di zero.

max_unbounded

Viene descritto un oggetto classe massimo che non limita la lunghezza massima di un oggetto freelist.

max_variable_size

Viene descritto un oggetto classe massimo che limiti un oggetto freelist a una lunghezza massima che è approssimativamente proporzionale al numero di blocchi di memoria allocati.

rts_alloc

La classe modello di rts_alloc viene descritto filtro che utilizza una matrice di istanze di cache e determina quale istanza da utilizzare per l'allocazione e la disallocazione in fase di esecuzione anziché in fase di compilazione.

synchronization_none

Viene descritto un filtro di sincronizzazione non fornisce sincronizzazione.

synchronization_per_container

Viene descritto un filtro di sincronizzazione che fornisce un oggetto cache separato per ogni oggetto allocatore.

synchronization_per_thread

Viene descritto un filtro di sincronizzazione che fornisce un oggetto cache separato per ogni thread.

synchronization_shared

Viene descritto un filtro di sincronizzazione che utilizza un mutex per controllare l'accesso a un oggetto cache condiviso da tutti gli allocatori.

Requisiti

intestazione: <allocators>

Stdext diSpazio dei nomi:

Vedere anche

Altre risorse

File di intestazione