2010-07-25 4 views
8

J'utilise la classe de liste dans C++ et je ne sais pas qu'est-ce que allocateur signifie iciqu'est-ce que allocateur signifie en STL

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

si j'ai list <int> mylist que cela voudrait dire attribuer le type de mémoire entier en utilisant l'allocateur quand un élément est ajouté à la liste? et quand voulez-vous un allocateur personnalisé?

Répondre

11

Oui. Un allocator est un moyen de factoriser l'allocation de mémoire à partir de l'utilisation de la mémoire. Si un conteneur a besoin de mémoire, au lieu de:

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

Vous obtenez:

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

Il y a un allocateur standard, std::allocator, qui utilise operator new globale et operator delete.

Vous souhaitez utiliser votre propre allocateur à chaque fois que vous avez besoin de l'affecter de manière spéciale. Ces cas peuvent être: obtenir de la mémoire à partir de certaines listes, allouer à partir de la pile, etc. (Généralement à des fins d'optimisation, mais vous pouvez également enregistrer des statistiques avec un allocateur personnalisé) La plupart du temps, l'allocateur standard fonctionne parfaitement.

2

En plus de ce que GMan a signalé, les allocateurs personnalisés peuvent être utilisés pour l'allocation de mémoire alignée. Certaines bibliothèques hautes performances utilisant un jeu d'instructions SIMD nécessitent une mémoire alignée. Ces bibliothèques peuvent vous fournir des allocateurs prêts à l'emploi que vous pouvez brancher sur n'importe quel conteneur STL. Il y a également des allocateurs alignés en cache pour éviter le faux partage dans le code multithread. TBB d'Intel est livré avec des allocateurs évolutifs, qui peuvent accélérer l'allocation/delocation de mémoire multi-thread.