Se recomienda usar Visual Studio 2017

<allocators>

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Define varias plantillas que le ayudan a asignar y liberar bloques de memoria de contenedores de nodo.

#include <allocators>  

El <> > encabezado proporciona seis plantillas de asignador que se pueden utilizar para seleccionar las estrategias de administración de memoria para los contenedores de nodo. Para su uso con estas plantillas, también proporciona varios filtros de sincronización diferentes para adaptar la estrategia de administración de memoria a una variedad de diferentes combinaciones de subprocesamiento múltiple (incluso ninguno). Coincidencia de una estrategia de administración de memoria los requisitos de sincronización, de una determinada aplicación y patrones de uso de memoria conocido a menudo puede aumentar la velocidad o reducir los requisitos de memoria generales de una aplicación.

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

Los contenedores de nodo basado en la biblioteca estándar de C++ (std::list, std::set, std::multiset, std:: Map y std::multimap) almacenan sus elementos en nodos individuales. Todos los nodos de un tipo de contenedor determinado tienen el mismo tamaño, por lo que no es necesaria la flexibilidad de un administrador de memoria de propósito general. Dado que el tamaño de cada bloque de memoria en tiempo de compilación, el Administrador de memoria puede ser mucho más rápido y sencillo.

Cuando se usa con contenedores que no están basados en un nodo (por ejemplo, std::deque de std:: vector de contenedores de biblioteca estándar de C++ y std:: basic_string), las plantillas de alllocator funcionarán correctamente, pero no suelen proporcionar cualquier mejora del rendimiento en el asignador predeterminado.

Un asignador es una clase de plantilla que describe un objeto que administra la asignación de almacenamiento y la liberación de objetos y matrices de objetos de un tipo designado. Objetos de asignador se 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 el argumento de plantilla Type es el tipo que administra la instancia de asignador. La biblioteca estándar de C++ proporciona un asignador predeterminado, la clase de plantilla asignador, que se define en <> </> > . El <> > encabezado proporciona los asignadores siguientes:

Utilice una instancia adecuada de un asignador como el 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 de sincronización predeterminado.

Utilice la macro ALLOCATOR_DECL para crear plantillas de asignador con filtros de sincronización que no sea el 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 sync_per_thread filtro de sincronización.

Un asignador de bloque es una caché o un filtro. Una caché es una clase de plantilla que toma un argumento de tipo std:: size_t. Define un asignador de bloque que asigna y desasigna bloques de memoria de un tamaño único. Debe obtener memoria mediante el operador new, pero no necesitan realizar una llamada independiente a operador new para cada bloque. Por ejemplo, pueden subasignar desde un bloque o cancelar la asignación de bloques para la reasignación posterior de caché mayor.

Con un compilador que no se puede compilar reenlace el valor del argumento std:: size_t utilizado cuando se crea una instancia de la plantilla no es necesariamente el valor de la _Sz del argumento pasado a las funciones de miembro de la memoria caché asignar y desasignar.

<>>proporciona las siguientes plantillas de caché:

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

<>>También proporciona el filtro rts_alloc, que contiene el asignador de bloque varias instancias y determina qué instancia para la asignación o desasignación en tiempo de ejecución en lugar de en tiempo de compilación. Se usa con los compiladores que no se pueden reenlazar mediante compilación.

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

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

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

<>>proporciona las siguientes clases máximas:

Macros

ALLOCATOR_DECLDa como resultado un asignador de clase de plantilla.
CACHE_CHUNKLISTProduce stdext::allocators::cache_chunklist<sizeof(Type)>.
CACHE_FREELISTProduce stdext::allocators::cache_freelist<sizeof(Type), max>.
CACHE_SUBALLOCProduce stdext::allocators::cache_suballoc<sizeof(Type)>.
SYNC_DEFAULTDa como resultado un filtro de sincronización.

Operadores

operador! = (<>>)Comprueba la desigualdad entre los objetos de asignador de una clase especificada.
Operator == (<>>)Comprueba la igualdad entre los objetos de asignador de una clase especificada.

Clases

allocator_baseDefine la clase base y las funciones comunes necesarias para crear un asignador definido por el usuario a partir de un filtro de sincronización.
allocator_chunklistDescribe un objeto que administra la asignación de almacenamiento y la liberación de objetos con una caché de tipo cache_chunklist.
allocator_fixed_sizeDescribe un objeto que administra la asignación de almacenamiento y la liberación de objetos de tipo Type con una memoria caché de tipo cache_freelist con una longitud administrada por max_fixed_size.
allocator_newdelImplementa un asignador que usa operator delete desasignar una memoria de bloque y operator new para asignar un bloque de memoria.
allocator_suballocDescribe un objeto que administra la asignación de almacenamiento y la liberación de objetos de tipo Type con una memoria caché de tipo cache_suballoc.
allocator_unboundedDescribe un objeto que administra la asignación de almacenamiento y la liberación de objetos de tipo Type con una memoria caché de tipo cache_freelist con una longitud administrada por max_unbounded.
allocator_variable_sizeDescribe un objeto que administra la asignación de almacenamiento y la liberación de objetos de tipo Type con una memoria caché de tipo cache_freelist con una longitud administrada por max_variable_size.
cache_chunklistDefine un asignador de bloque que asigna y desasigna bloques de memoria de un tamaño único.
cache_freelistDefine un asignador de bloque que asigna y desasigna bloques de memoria de un tamaño único.
cache_suballocDefine un asignador de bloque que asigna y desasigna bloques de memoria de un tamaño único.
FreeListAdministra una lista de bloques de memoria.
max_fixed_sizeDescribe un objeto de clase max limita una freelist objeto con una longitud máxima fija.
max_noneDescribe un objeto de clase max limita una freelist objeto a una longitud máxima de cero.
max_unboundedDescribe un objeto de clase max no limita la longitud máxima de un freelist objeto.
max_variable_sizeDescribe un objeto de clase max limita una freelist asignar el objeto a una longitud máxima es de aproximadamente proporcional al número de bloques de memoria.
rts_allocDescribe la clase de plantilla de rts_alloc una filtro que contiene una matriz de caché de instancias y determina qué instancia para la asignación y desasignación en tiempo de ejecución en lugar de en tiempo de compilación.
sync_noneDescribe los filtros de sincronización que no proporciona ninguna sincronización.
sync_per_containerDescribe los filtros de sincronización que proporciona un objeto de caché independiente para cada objeto de asignador.
sync_per_threadDescribe los filtros de sincronización que proporciona un objeto de caché independiente para cada subproceso.
sync_sharedDescribe los filtros de sincronización que utiliza una exclusión mutua para controlar el acceso a un objeto de caché compartida por todos los asignadores.

Encabezado:<>>

Espacio de nombres: stdext

Referencia de archivos de encabezado

Mostrar: