2010-07-25 16 views
8

estoy usando la clase lista en C++ y que no sé lo que quiere decir aquí asignador¿qué significa asignador de STL

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

si tengo list <int> mylist significaría destinar tipo entero de memoria utilizando el asignador cuando un elemento se agrega a la lista? y cuando quieres un asignador personalizado?

Respuesta

11

Sí. Un allocator es una forma de factorizar la asignación de memoria desde el uso de la memoria. Si un contenedor necesita un poco de memoria, en lugar de:

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

Se obtiene:

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

No es un asignador estándar, std::allocator, que utiliza operator new mundial y operator delete.

Desea utilizar su propio asignador en cualquier momento que necesite asignar de una manera especial. Estos casos pueden ser: obtener memoria de algunos freelist, asignar de la pila, etc. (generalmente para fines de optimización, aunque también puede registrar estadísticas con un asignador personalizado). La mayoría de las veces, el asignador estándar funciona perfectamente.

2

Además de lo que señaló GMan, se pueden usar asignadores personalizados para la asignación de memoria alineada. Algunas bibliotecas de alto rendimiento que usan el conjunto de instrucciones SIMD requieren memoria alineada. Esas bibliotecas pueden proporcionarle asignadores listos para usar que puede enchufar a cualquier contenedor STL. También hay asignadores alineados en la memoria caché para evitar el uso compartido falso en el código de subprocesos múltiples. El TBB de Intel incluye asignadores escalables, que pueden acelerar la asignación/desasociación de memoria de subprocesos múltiples.

Cuestiones relacionadas