2010-07-25 19 views
8

sto usando classe lista in C++ e non so cosa vuol dire allocatore quicosa vuol dire allocatore in STL

template < class T, class Allocator = allocator<T> > class list; 

se ho list <int> mylist significherebbe destinare tipo integer di memoria utilizzando l'allocatore quando un elemento viene aggiunto alla lista? e quando vuoi un allocatore personalizzato?

risposta

11

Sì. Un allocator è un modo per considerare l'allocazione della memoria dall'uso della memoria. Se un contenitore ha bisogno di un po 'di memoria, invece di:

// too rigid, cannot allow custom allocation schemes 
void* mem = ::operator new(someAmount); 

Si ottiene:

// flexible, allows custom allocation schemes 
void* mem = myallocator.allocate(someAmount); 

C'è un allocatore standard std::allocator, che utilizza globale operator new e operator delete.

Si desidera utilizzare il proprio allocatore ogni volta che è necessario assegnare in modo speciale. Questi casi possono essere: recuperare memoria da qualche elenco gratuito, allocare dallo stack, ecc. (Generalmente per scopi di ottimizzazione, sebbene sia possibile anche registrare statistiche con un allocatore personalizzato) La maggior parte delle volte, l'allocatore standard funziona perfettamente.

2

In aggiunta a quanto indicato da GMan, è possibile utilizzare gli allocatori personalizzati per l'allocazione di memoria allineata. Alcune librerie ad alte prestazioni che utilizzano il set di istruzioni SIMD richiedono memoria allineata. Queste librerie possono fornire allocatori pronti per l'uso che è possibile collegare a qualsiasi contenitore STL. Ci sono anche allocatori di cache allineati per evitare false condivisioni nel codice multi-thread. Il TBB di Intel è dotato di allocatori scalabili, che possono accelerare l'allocazione/delocalizzazione della memoria multi-thread.