Freigeben über


<allocators>

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

#include <allocators>

Hinweise

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

Die Belegungsfunktionsvorlagen 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 std::multimap) speichern und ihre Elemente in den einzelnen Knoten.Alle Knoten für einen bestimmten Containertyp sind die gleiche Größe, sodass 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 und schneller sein.

Wenn sie mit Containern, die nicht Knoten-basiert sind (wie das C++-Standardbibliothek-Container std::vector std::deque und Std::basic_string) verwendet werden, die alllocator Vorlagen funktionieren ordnungsgemäß, jedoch sind wahrscheinlich, keine Leistungsverbesserung über der standardmäßige Belegungsfunktion bereitzustellen.

Eine Belegungsfunktion ist eine Vorlagenklasse, die ein Objekt beschrieben wird, das Speicherzuweisung und Freigeben für Objekte und Arrays eines festgelegten Typs verwaltet.Allocator-Objekte werden von einige Containervorlagenklassen in der C++-Standardbibliothek verwendet.

Die Belegungsfunktionen sind alle Vorlagen dieses Typs:

template<class Type>

class allocator;

wobei Vorlagenargument Type der Typ ist, der durch die Belegungsfunktionsinstanz verwaltet wird.Das C++-Standardbibliothek stellt eine standardmäßige Belegungsfunktion, Vorlagenklasse Belegungsfunktion, die in <memory> definiert ist.Der <allocators> Header stellt die folgenden Belegungsfunktionen:

Verwenden Sie eine entsprechende Instanziierung einer Belegungsfunktion als zweites Typargument, wenn Sie einen Container, wie das folgende Codebeispiel erstellen.

#include <list>

#include <allocators>

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

_List0 ordnet Knoten mit allocator_chunklist und dem Standard Synchronisierungsfilter zu.

Verwenden Sie das Makro ALLOCATOR_DECL (<allocators>), um Belegungsfunktionsvorlagen mit Synchronisierungsfiltern andere als die standardmäßige 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 dem synchronization_per_thread Synchronisierungsfilter zu.

Eine Blocksbelegungsfunktion ist ein Cache oder ein Filter.Ein Cache ist eine Vorlagenklasse, die ein Argument vom std::size_t akzeptiert.Es wird eine Blocksbelegungsfunktion Speicherblöcke, die einer einzelnen Größe zuordnet und freigibt.Er muss Arbeitsspeicher mithilfe des - Operators new erhalten, aber er muss, keinen separaten aufrufen dem Operator new für jeden Block.Er kann, beispielsweise, suballocate aus einem größeren Block oder Cache von freigegebenen Blöcke für folgende Neuzuordnung.

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

<allocators> stellt die folgenden Cachevorlagen:

Ein Filter ist eine Blocksbelegungsfunktion, deren Memberfunktionen mit einer anderen Blocksbelegungsfunktion implementiert, die ihm als Vorlagenargument übergeben wird.Die häufigste Verwendungsform des Filters ist ein Synchronisierungsfilter, der eine Synchronisierungsrichtlinie anwenden, um Zugriff auf den Memberfunktionen einer Instanz einer anderen Blocksbelegungsfunktion zu steuern.<allocators> stellt die folgenden Synchronisierungsfilter:

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

Eine Synchronisierungsrichtlinie bestimmt wie Instanzenhandles gleichzeitige Zuordnung einer Belegungsfunktion und Freigabenanforderungen von mehreren Threads.Die einfachste Richtlinie ist, alle Anforderungen nach dem zugrunde liegenden Cacheobjekt direkt zu übergeben und lässt Synchronisierungsverwaltung für den Benutzer.Eine komplexere Richtlinie konnte, einen Mutex verwendet werden, um den Zugriff auf das zugrunde liegende Cacheobjekt zu serialisieren.

Wenn ein Compiler das Kompilieren von Singlethreadanwendung und Multithreadanwendungen unterstützt, ist der Standardwert Synchronisierungsfilter für Singlethreade Anwendungen sync_none; für alle anderen Fällen ist es sync_shared.

Die Cachevorlage cache_freelist nimmt ein maximales Klassenargument, das die maximale Anzahl von bestimmt in der Liste der freien Blöcken gespeichert werden, Elementen.

<allocators> maximalen stellt die folgenden Klassen:

Ee292134.collapse_all(de-de,VS.110).gifMakros

ALLOCATOR_DECL (<allocators>)

Ergibt eine Belegungsfunktionsvorlagenklasse.

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.

Ee292134.collapse_all(de-de,VS.110).gifOperatoren

operator!= (<allocators>)

Tests für Ungleichheit zwischen allocator-Objekten einer bestimmten Klasse.

operator== (<allocators>)

Tests für Gleichheit zwischen allocator-Objekten einer bestimmten Klasse.

Ee292134.collapse_all(de-de,VS.110).gifKlassen

allocator_base

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

allocator_chunklist

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

allocator_fixed_size

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

allocator_newdel

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

allocator_suballoc

Beschreibt ein Objekt, das Speicherzuweisung und Freigeben für Objekte des Typs Type mithilfe eines Cache Typs cache_suballoc verwaltet.

allocator_unbounded

Beschreibt ein Objekt, das Speicherzuweisung und Freigeben für Objekte des Typs Type mithilfe eines Cache Typs 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 mithilfe eines Cache Typs cache_freelist mit einer Länge verwaltet, die durch max_variable_size verwaltet wird.

cache_chunklist

Definiert eine Blocksbelegungsfunktion Speicherblöcke, die einer einzelnen Größe zuordnet und freigibt.

cache_freelist

Definiert eine Blocksbelegungsfunktion Speicherblöcke, die einer einzelnen Größe zuordnet und freigibt.

cache_suballoc

Definiert eine Blocksbelegungsfunktion Speicherblöcke, 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 maximalen Länge beschränkt.

max_none

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

max_unbounded

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

max_variable_size

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

rts_alloc

Die rts_alloc Vorlagenklasse beschreibt Filter, die ein Array Cacheinstanzen enthält und bestimmt, welche Instanz zeigen, um für Zuordnung und Freigabe statt zur Kompilierzeit zur Laufzeit zu verwenden.

synchronization_none

Beschreibt einen Synchronisierungsfilter, der keine Synchronisierung bereitstellt.

synchronization_per_container

Beschreibt einen Synchronisierungsfilter, der ein separates Cacheobjekt für jedes allocator-Objekt bereitstellt.

synchronization_per_thread

Beschreibt einen Synchronisierungsfilter, der ein separates Cacheobjekt für jeden Thread bereitstellt.

synchronization_shared

Beschreibt einen Synchronisierungsfilter, der einen Mutex verwendet, um den Zugriff auf einen Cacheobjekt zu steuern, das von allen Belegungsfunktionen freigegeben wird.

Anforderungen

Header: <allocators>

Namespace: stdext

Siehe auch

Weitere Ressourcen

Headerdateien