<allocators>
Definisce diversi modelli che consentono di allocare e liberare blocchi di memoria per i contenitori basati su nodi.
#include <allocators>
Note
<L'intestazione> di allocatori sono disponibili sei modelli di allocatore che possono essere utilizzati per selezionare le strategie di gestione della memoria per i contenitori basati su nodi. Per utilizzare questi modelli, sono disponibili vari filtri di sincronizzazione per l'esattezza alla strategia di gestione della memoria diversi schemi diversi multithreading (nessuno inclusi). La corrispondenza di una strategia di gestione della memoria ai 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 implementati con componenti riutilizzabili che possono essere personalizzate o sostituire per fornire le strategie di gestione della memoria aggiuntive.
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 le stesse dimensioni, pertanto la flessibilità di un gestore di memoria di tipo generico non è necessario. Quando la dimensione di ciascun blocco di memoria è nota in fase di compilazione, il gestore di memoria può essere molto più semplice e più rapido.
Quando utilizzati 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 grado di 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. Oggetti di 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 allocatori fornisce i seguenti allocatori:
Utilizzare una creazione di istanza appropriata di un allocatore come secondo argomento di tipo durante la creazione di 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 non sincronizzati.
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 di 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. Può, ad esempio, un oggetto uno più grande blocco o dai blocchi rilasciati cache di riallocazione successiva.
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 del _Sz dell'argomento passato a funzioni membro di una cache allocano e release.
<gli allocatori> fornisce i seguenti modelli della cache:
Un filtro è un allocatore di blocco che implementa le funzioni membro utilizzando un altro allocatore di blocco viene passato come argomento di modello. La forma più 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. <gli allocatori> fornisce i seguenti filtri di sincronizzazione:
<gli allocatori> fornisce anche il filtro rts_alloc, che utilizzi l'allocatore di blocco più istanze di esempio 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 quali handle di richieste simultanee di allocazione e disallocazione di un allocatore da più thread. I criteri più semplici sono di passare direttamente tutte le richieste da a 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 a thread singolo che le applicazioni 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.
<gli allocatori> sono disponibili le seguenti classi massime:
Macro
Rende una classe modello di allocatore. |
|
Rende stdext::allocators::cache_chunklist<sizeof(Type)>. |
|
Rende stdext::allocators::cache_freelist<sizeof(Type), max>. |
|
Rende stdext::allocators::cache_suballoc<sizeof(Type)>. |
|
Rende un filtro di sincronizzazione. |
Operatori
Verifica la disuguaglianza tra gli oggetti dell'allocatore di una classe specificata. |
|
Verifica l'uguaglianza tra gli oggetti dell'allocatore di una classe specificata. |
Classi
Definisce le funzioni comuni e della classe base necessarie per creare un allocatore definito da un filtro di sincronizzazione. |
|
Viene descritto un oggetto che gestisce l'allocazione di archiviazione e liberare per oggetti utilizzando una cache di tipo cache_chunklist. |
|
Viene descritto un oggetto che gestisce l'allocazione di archiviazione e liberare per oggetti di tipo Type utilizzando una cache di tipo cache_freelist con una lunghezza gestita da max_fixed_size. |
|
Implementa un allocatore che utilizza operator delete per rilasciare un blocco di memoria e operator new per allocare un blocco di memoria. |
|
Viene descritto un oggetto che gestisce l'allocazione di archiviazione e liberare per oggetti di tipo Type utilizzando una cache di tipo cache_suballoc. |
|
Viene descritto un oggetto che gestisce l'allocazione di archiviazione e liberare per oggetti di tipo Type utilizzando una cache di tipo cache_freelist con una lunghezza gestita da max_unbounded. |
|
Viene descritto un oggetto che gestisce l'allocazione di archiviazione e liberare per oggetti di tipo Type utilizzando una cache di tipo cache_freelist con una lunghezza gestita da max_variable_size. |
|
Definisce un allocatore di blocco che per allocare e liberare blocchi di memoria di una singola dimensione. |
|
Definisce un allocatore di blocco che per allocare e liberare blocchi di memoria di una singola dimensione. |
|
Definisce un allocatore di blocco che per allocare e liberare blocchi di memoria di una singola dimensione. |
|
Gestisce un elenco dei blocchi di memoria. |
|
Viene descritto un oggetto classe massimo che limiti un oggetto di freelist a una lunghezza massima fissa. |
|
Viene descritto un oggetto classe massimo che limiti un oggetto di freelist a raggiungere una lunghezza massima di zero. |
|
Viene descritto un oggetto classe massimo che non limita la lunghezza massima di un oggetto di freelist. |
|
Viene descritto un oggetto classe massimo che limiti un oggetto di freelist a una lunghezza massima che è approssimativamente proporzionale al numero di blocchi di memoria allocati. |
|
La classe modello di rts_alloc viene descritto filtro che utilizza una matrice di istanze della cache e determina quale istanza da utilizzare per l'allocazione e la disallocazione in fase di esecuzione anziché in fase di compilazione. |
|
Viene descritto un filtro di sincronizzazione non fornisce sincronizzazione. |
|
Viene descritto un filtro di sincronizzazione che fornisce un oggetto cache separato per ogni oggetto allocatore. |
|
Viene descritto un filtro di sincronizzazione che fornisce un oggetto cache separata per ogni thread. |
|
Viene descritto un filtro di sincronizzazione che utilizza un mutex per controllare l'accesso a un oggetto cache condiviso da tutti gli allocatori. |
Requisiti
allocatori <diIntestazione: >
Spazio dei nomi: stdext