<allocators>

Define varias plantillas que ayudan a asignar y los bloques de memoria libre para los contenedores nodo-basados.

#include <allocators>

Comentarios

El encabezado de <asignadores> proporciona seis plantillas de asignador que se pueden utilizar las estrategias de administración de memoria seleccionar para los contenedores nodo-basados.Para el uso con estas plantillas, también proporciona varios filtros de sincronización para adaptar la estrategia de administración de memoria a distintos esquemas de multithreading (sin incluida.La coincidencia una estrategia de administración de memoria los modelos conocidos de utilización de memoria, y los requisitos de sincronización, una aplicación determinada puede aumentar la velocidad o reducir a menudo los requisitos de memoria total de una aplicación.

Las plantillas de asignador se implementan con componentes reutilizables que pueden ser personalizados o reemplazar para proporcionar estrategias de administración de memoria adicionales.

los contenedores nodo-basados en la biblioteca estándar de C++ (std:: lista, std:: conjunto, std:: conjunto múltiple, std:: mapa y std:: multimap) almacenado sus elementos en nodos.Todos los nodos de un tipo de contenedor set son el mismo tamaño, por lo que la flexibilidad de un administrador de memoria de uso general no es necesaria.Dado que el tamaño de cada bloque de memoria se conoce en tiempo de compilación, el administrador de memoria puede ser mucho más sencilla y más rápido.

Cuando se utiliza con contenedores que nodo-no se basan (por ejemplo contenedores estándar std de la biblioteca de C++:: vector std:: deque, y std:: basic_string), las plantillas de alllocator funcionarán correctamente, pero no probablemente proporcionar ninguna mejora de rendimiento sobre el asignador predeterminado.

Un asignador es una clase de plantilla que describe un objeto que administra la asignación de almacenamiento y liberar para los objetos y matrices de objetos de tipo designado.Los objetos del asignador utilizan varias clases de plantilla de contenedor en la biblioteca estándar de C++.

los asignadores son todas las plantillas de este tipo:

template<class Type>

class allocator;

donde es el tipo el argumento Type de plantilla administrado por la instancia del asignador.La biblioteca estándar de C++ proporciona un asignador predeterminado, la clase de plantilla asignador, que se define en <memory>.el encabezado de <asignadores> proporciona los asignadores siguientes:

Utilice una creación correcta de un asignador como segundo argumento de tipo al crear un contenedor, como en el ejemplo de código siguiente.

#include <list>

#include <allocators>

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

_List0 asigna nodos con allocator_chunklist y el filtro predeterminado de sincronización.

Utilice la macro ALLOCATOR_DECL (<allocators>) para crear plantillas de asignador con los filtros de sincronización distinto del predeterminado:

#include <list>

#include <allocators>

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

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

_Lst1 asigna nodos con allocator_chunklist y el filtro de sincronización de synchronization_per_thread .

Un asignador de bloque es caché o un filtro.Caché es una clase de plantilla que toma un argumento de tipo std:: size_t.Define un asignador de bloque que asignar y desasignar cualquier espacio bloques de memoria de un solo tamaño.Debe obtener memoria utilizando el operador new, pero no necesita realizar una llamada independiente al operador new para cada bloque.Puede, por ejemplo, suballocate de un bloque mayor o bloques desasignados caché para la reasignación subsiguiente.

Con un compilador que no pueda compilar reencuaderne el valor std:: el argumento de size_t se usa cuando la plantilla se han creado instancias no es necesariamente el valor de _Sz del argumento pasado al miembro de caché que las funciones asignan y que desasignan.

<asignadores> proporciona las siguientes plantillas de caché:

Un filtro es un asignador de bloque que implementa sus funciones miembro utilizando otro asignador del bloque que se pasa a como argumento de plantilla.La forma más común de filtro es un filtro de sincronización, que aplica una directiva de sincronización para controlar el acceso a las funciones miembro de una instancia de otro asignador de bloque. <asignadores> proporciona los siguientes filtros de sincronización:

<asignadores> también proporciona el filtro rts_alloc, que contiene las instancias del asignador de bloques de varias y determina que instancia a utilizar para la asignación o la desasignación en tiempo de ejecución en lugar de en tiempo de compilación.Se utiliza con compiladores que no pueden compilar reencuadernan.

Una directiva de sincronización determina cómo los identificadores de instancia las solicitudes simultáneas de asignación de un asignador y la desasignación de varios subprocesos.La directiva más simple es pasar todas las solicitudes directamente a través del objeto de caché subyacente, ya que la administración de sincronización al usuario.Una directiva más compleja podría ser utilizar una exclusión mutua para serializar el acceso al objeto de caché subyacente.

Si un compilador admite la compilación de aplicaciones de un único subproceso y multiproceso, el filtro predeterminado de sincronización para las aplicaciones de un único subproceso es sync_none; para todos los demás casos es sync_shared.

La plantilla cache_freelist de caché toma un argumento máximo de la clase que determina el número máximo de elementos que se almacenan en la lista disponible.

<asignadores> proporciona las clases de siguientes:

Ee292134.collapse_all(es-es,VS.110).gifMacros

ALLOCATOR_DECL (<allocators>)

Genera una clase de plantilla de asignador.

CACHE_CHUNKLIST (<allocators>)

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

CACHE_FREELIST (<allocators>)

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

CACHE_SUBALLOC (<allocators>)

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

SYNC_DEFAULT (<allocators>)

Produce un filtro de sincronización.

Ee292134.collapse_all(es-es,VS.110).gifOperadores

operator!= (<allocators>)

Comprueba la desigualdad entre los objetos del asignador de una clase especificada.

operator== (<allocators>)

Comprueba la igualdad entre los objetos del asignador de una clase especificada.

Ee292134.collapse_all(es-es,VS.110).gifClases

allocator_base

Define la clase base y funciones comunes necesarias para crear un asignador definido por el usuario de un filtro de sincronización.

allocator_chunklist

Describe un objeto que administra la asignación de almacenamiento y liberar para los objetos en la memoria caché de cache_chunklistescrito.

allocator_fixed_size

Describe un objeto que administra la asignación de almacenamiento y liberar para los objetos de Type escribe utilizando la memoria caché de cache_freelist escrito con una longitud administrada por max_fixed_size.

allocator_newdel

Implementa un asignador que utilice operator delete para desasignar un bloque y operator new de memoria para asignar un bloque de memoria.

allocator_suballoc

Describe un objeto que administra la asignación de almacenamiento y liberar para los objetos de Type escribe utilizando la memoria caché de cache_suballocescrito.

allocator_unbounded

Describe un objeto que administra la asignación de almacenamiento y liberar para los objetos de Type escribe utilizando la memoria caché de cache_freelist escrito con una longitud administrada por max_unbounded.

allocator_variable_size

Describe un objeto que administra la asignación de almacenamiento y liberar para los objetos de Type escribe utilizando la memoria caché de cache_freelist escrito con una longitud administrada por max_variable_size.

cache_chunklist

Define un asignador de bloque que asignar y desasignar cualquier espacio bloques de memoria de un solo tamaño.

cache_freelist

Define un asignador de bloque que asignar y desasignar cualquier espacio bloques de memoria de un solo tamaño.

cache_suballoc

Define un asignador de bloque que asignar y desasignar cualquier espacio bloques de memoria de un solo tamaño.

freelist

administra una lista de bloques de memoria.

max_fixed_size

Describe un objeto máximo de la clase limitar un objeto de freelist a una longitud máxima fija.

max_none

Describe un objeto máximo de la clase limitar un objeto de freelist a una longitud máxima de cero.

max_unbounded

Describe un objeto máximo de clase que no limita la longitud máxima de un objeto de freelist .

max_variable_size

Describe un objeto máximo de la clase limitar un objeto de freelist a una longitud máxima que sea aproximadamente proporcional al número de bloques de memoria asignados.

rts_alloc

La clase de plantilla de rts_alloc describe filtro que contiene una matriz de instancias de caché y determina que instancia a utilizar para la asignación y la desasignación en tiempo de ejecución en lugar de en tiempo de compilación.

synchronization_none

Describe un filtro de sincronización que no proporciona ninguna sincronización.

synchronization_per_container

Describe un filtro de sincronización que proporciona un objeto de caché independiente para cada objeto de asignador.

synchronization_per_thread

Describe un filtro de sincronización que proporciona un objeto de caché independiente para cada subproceso.

synchronization_shared

Describe un filtro de sincronización que utilice una exclusión mutua para controlar el acceso a un objeto de caché compartido por todos los asignadores.

Requisitos

encabezado: <asignadores>

espacio de nombres: stdext

Vea también

Otros recursos

Archivos de encabezado