Freigeben über


<allocators>

Definiert mehrere Vorlagen, die Speicherblöcken, für Knoten-basierte Container unterstützen und freizugeben.

#include <allocators>

Hinweise

Die <Zuweisungskopfzeile> stellt sechs Zuweisungsvorlagen, die verwendet werden können, um Speicherverwaltungsstrategien für Knoten-basierte Container auszuwählen. Bei Verwendung mit diesen Vorlagen, stellt auch sie mehrere verschiedene Synchronisierungsfilter, um die Speicherverwaltungsstrategie zu einer Vielzahl verschiedener Multithreadingschemas anzupassen (einschließlich keine). Die Anpassung einer Speicherverwaltungsstrategie mit der bekannten Speicherauslastungsmuster und der Synchronisierungsanforderungen, einer bestimmten Anwendung kann die Geschwindigkeit häufig erhöhen oder die Gesamtarbeitsspeicheranforderungen einer Anwendung verringern.

Die Zuweisungsvorlagen werden mit wiederverwendbaren Komponenten implementiert, die angepasst werden oder ersetzt werden können, um zusätzliche Speicherverwaltungsstrategien bereitzustellen.

Die Knoten-basierten Container in der C++-Standardbibliothek (std::list, std::set, std::multiset, std::map und std::multimap) speichern ihre Elemente in den einzelnen Knoten. Alle Knoten für einen bestimmten Containertyp sind die gleiche Größe, daher wird die Flexibilität eines allgemeinen Speicher-Managers nicht benötigt. Da die Größe eines Speicherblocks zur Kompilierzeit bekannt ist, kann der Speicher-Manager viel einfacher sein und schneller.

Wenn sie mit Containern, die nicht Knoten-basiert sind (wie das C++-Standardbibliotheks-Container std::vector std::deque und Std::basic_string) verwendet werden, verfügen die alllocator Vorlagen ordnungsgemäß, jedoch werden sich, keine Leistungsverbesserung über die Standardzuweisung bereitzustellen.

Eine Zuweisung ist eine Vorlagenklasse, die ein Objekt beschrieben wird, das Speicherzuweisung und Freigeben für Objekte und Objektarrays eines festgelegten Typ verwaltet. Zuweisungsobjekte werden von mehreren Containervorlagenklassen in der C++-Standardbibliothek verwendet.

Die Zuweisungen sind alle Vorlagen dieses Typs:

template<class Type>

class allocator;

wobei das Vorlagenargument Type der Typ ist, der durch die Zuweisungsinstanz verwaltet wird. Die C++-Standardbibliothek enthält eine Vorlagenklasse Standardzuweisung, Zuweisung, die in <memory> definiert wird. Die <Zuweisungskopfzeile> stellt die folgenden Zuweisungen:

Verwenden Sie eine entsprechende Instanziierung einer Zuweisung als zweites Typargument, wenn Sie einen Container, wie im folgenden Codebeispiel erstellen.

#include <list>

#include <allocators>

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

_List0 ordnet Knoten mit allocator_chunklist und dem Standardsynchronisierungsfilter zu.

Verwenden Sie das Makro ALLOCATOR_DECL (<allocators>), um Zuweisungsvorlagen mit Synchronisierungsfiltern Standardtrennzeichen abweichendes zu erstellen:

#include <list>

#include <allocators>

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

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

_Lst1 ordnet Knoten mit allocator_chunklist und der synchronization_per_thread Synchronisierungsfilter zu.

Eine Blocks-Zuweisung ist ein Cache oder ein Filter. Ein Cache ist eine Vorlagenklasse, die ein Argument std::size_t Typ akzeptiert. Er definiert eine Blocks-Zuweisung Speicherblöcken, die einer einzelnen Größe zuordnet und freigibt. Er muss Arbeitsspeicher mit dem Operator new abgerufen, aber er muss, keinen zusätzlichen Aufruf zu machen den Operator new für jeden Block. Er kann, beispielsweise, suballocate von einem größeren Block oder Cache von freigegebenen Blöcke für nachfolgende Neuzuordnung.

Mit einem Compiler, der nicht kompilieren kann, binden Sie den Wert des verwendeten std::size_t Arguments, als Vorlage instanziiert wurde, ist nicht unbedingt der Wert des Arguments _Sz erneut Memberfunktionen eines Cache übergeben wird, zuordnen und freigeben.

<Zuweisungen> stellt die folgenden Cachevorlagen:

Ein Filter ist eine Blocks-Zuweisung, deren Memberfunktionen mit einer anderen Blocks-Zuweisung implementiert, die dorthin als Vorlagenargument übergeben wird. Die häufigste Nutzungsform des Filters ist ein Synchronisierungsfilter, der eine Synchronisierungsrichtlinie anwenden, um Zugriff auf die Memberfunktionen einer Instanz einer anderen Blocks-Zuweisung zu steuern. <Zuweisungen> stellt die folgenden Synchronisierungsfilter:

<Zuweisungen> stellt auch den Filter rts_alloc, der mehrere Blocks-Zuweisung als Generatorinstanziierung und bestimmt enthält, die einer Instanz, um für Zuordnungs- oder Freigabe statt zur Kompilierzeit zur Laufzeit verwenden zu können. Es wird mit Compilern verwendet, die nicht kompiliert können erneut binden.

Eine Synchronisierungsrichtlinie bestimmt z Instanzenhandles gleichzeitige Zuordnung einer Zuweisung und Freigabenanforderungen von mehreren Threads. Die einfachste Richtlinie ist, alle Anforderungen nach dem zugrunde liegenden Cacheobjekt direkt übergeben und belässt Synchronisierungsverwaltung dem Benutzer. Eine komplexere Richtlinie kann, einen Mutex zu verwenden sein, um Zugriff auf das zugrunde liegenden Cacheobjekt zu serialisieren.

Wenn ein Compiler die Kompilierung von Singlethreadanwendung und Multithreadanwendungen unterstützt, ist der Standardsynchronisierungsfilter für einfädige Anwendungen sync_none; für alle anderen Fällen ist es sync_shared.

Die Cachevorlage cache_freelist akzeptiert ein maximales Klassenargument, das die maximale Anzahl der bestimmt in der Liste der freien Blöcke zu speichernden Elemente.

<Zuweisungen> maximale stellt die folgenden Klassen:

Makros

ALLOCATOR_DECL (<allocators>)

Ergibt eine Zuweisungsvorlagenklasse.

CACHE_CHUNKLIST (<allocators>)

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

CACHE_FREELIST (<allocators>)

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

CACHE_SUBALLOC (<allocators>)

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

SYNC_DEFAULT (<allocators>)

Ergibt einen Synchronisierungsfilter.

Operatoren

operator!= (<allocators>)

Es wird auf Ungleichheit zwischen Zuweisungsobjekten einer bestimmten Klasse getestet.

operator== (<allocators>)

Es wird auf Gleichheit zwischen Zuweisungsobjekten einer bestimmten Klasse getestet.

Klassen

allocator_base

Definiert die Basisklasse und Common funktioniert erforderlich, um eine benutzerdefinierte Zuordnung von einem Synchronisierungsfilter zu erstellen.

allocator_chunklist

Beschreibt ein Objekt, das Speicherzuweisung und Freigeben für Objekte mithilfe eines Cache Typs cache_chunklist.

allocator_fixed_size

Beschreibt ein Objekt, das Speicherzuweisung und Freigeben für Objekte des Typs Type mit einem Cache Typ cache_freelist mit einer Länge verwaltet, die durch max_fixed_size verwaltet wird.

allocator_newdel

Implementiert eine Zuweisung, die operator delete verwendet, um einen Speicherblock freizugeben und operator new, um einen Speicherblock zuzuordnen.

allocator_suballoc

Beschreibt ein Objekt, das Speicherzuweisung und Freigeben für Objekte des Typs Type mit einem Cache Typs cache_suballoc.

allocator_unbounded

Beschreibt ein Objekt, das Speicherzuweisung und Freigeben für Objekte des Typs Type mit einem Cache Typ cache_freelist mit einer Länge verwaltet, die durch max_unbounded verwaltet wird.

allocator_variable_size

Beschreibt ein Objekt, das Speicherzuweisung und Freigeben für Objekte des Typs Type mit einem Cache Typ cache_freelist mit einer Länge verwaltet, die durch max_variable_size verwaltet wird.

cache_chunklist

Definiert eine Blocks-Zuweisung Speicherblöcken, die einer einzelnen Größe zuordnet und freigibt.

cache_freelist

Definiert eine Blocks-Zuweisung Speicherblöcken, die einer einzelnen Größe zuordnet und freigibt.

cache_suballoc

Definiert eine Blocks-Zuweisung Speicherblöcken, die einer einzelnen Größe zuordnet und freigibt.

freelist

Verwaltet eine Liste von Speicherblöcken.

max_fixed_size

Beschreibt ein maximales Klassenobjekt, das ein freelist-Objekt einer festen maximale Länge eingeschränkt.

max_none

Beschreibt ein maximales Klassenobjekt, das ein freelist-Objekt auf eine maximale Länge von null einschränkt.

max_unbounded

Beschreibt ein maximales Klassenobjekt, das nicht die maximale Länge eines freelist-Objekts beschränkt.

max_variable_size

Beschreibt ein maximales Klassenobjekt, das ein freelist-Objekt auf eine maximale Länge eingeschränkt, die zur Anzahl von reservierten Speicherblöcken ungefähr proportional ist.

rts_alloc

Die rts_alloc Vorlagenklasse Filter beschreibt, die ein Array Cacheinstanzen enthält und bestimmt, die als eine Instanz, um für Zuordnungs- und Freigabe statt zur Kompilierzeit zur Laufzeit verwenden zu können.

synchronization_none

Beschreibt einen Synchronisierungsfilter, der keine Synchronisierung bietet.

synchronization_per_container

Beschreibt einen Synchronisierungsfilter, wofür ein separates Cacheobjekt für jedes Zuweisungsobjekt bereitstellt.

synchronization_per_thread

Beschreibt einen Synchronisierungsfilter, wofür ein separates Cacheobjekt für jeden Thread enthält.

synchronization_shared

Beschreibt einen Synchronisierungsfilter, der einen Mutex verwendet, um Zugriff auf einen Cacheobjekt zu steuern, auf das alle Zuweisungen freigegeben wird.

Anforderungen

Zuweisungen Header: <>

Namespace: stdext

Siehe auch

Weitere Ressourcen

Headerdateien der C++-Standardbibliothek