Sdílet prostřednictvím


<allocators>

Definuje několik šablon, které pomáhají přidělit a volné bloky paměti pro kontejnery založené na uzlu.

#include <allocators>

Poznámky

<Allocators> záhlaví obsahuje šest přidělování šablony, které lze použít k výběru strategie správy paměti pro kontejnery založené na uzlu.Pomocí těchto šablon také nabízí několik různých synchronizační filtry přizpůsobit strategie správy paměti na celou řadu různých režimů multithreading (včetně žádný).Odpovídající strategie správy paměti paměť zvyklosti a synchronizace požadavky konkrétní aplikace lze často zvýšit rychlost nebo snížit celkové požadavky paměti aplikace.

Přidělování šablony jsou implementovány s opakovaně použitelných komponent, které lze přizpůsobit nebo nahradit poskytnout další správa paměti strategie.

Kontejnery založené na uzlu v Standard C++ library (std::list, std::set, std::multiset, std::map a std::multimap) ukládat jejich prvků v jednotlivých uzlech.Všechny uzly typu určitého kontejneru mají stejnou velikost, tak flexibilní univerzální paměti manager není nutná.Vzhledem k tomu, že velikost každého bloku paměti je známa v době kompilace, správce paměti může být mnohem jednodušší a rychlejší.

Při použití s kontejnery, které nejsou založené na uzlu (například Standard C++ library kontejnery std::vector std::deque a std::basic_string), alllocator šablony bude správně fungovat, ale nejsou může zajistit zlepšení výkonu pomocí přidělujícího modulu výchozí.

Přidělování je třída šablony, který popisuje objekt, který spravuje úložiště přidělení a uvolnění objektů a polí objektů určeného typu.Přidělování objekty používají několik kontejner šablony tříd knihovny Standard C++.

Allocators jsou všechny šablony tohoto typu:

template<class Type>

class allocator;

Pokud argument šablony Type je typ spravuje přidělování instance.Knihovna Standard C++ poskytuje výchozí přidělování, šablony třídy přidělování, který je definován v <memory>.<Allocators> záhlaví obsahuje následující allocators:

Použijte vhodné vytvoření instance systému přidělování jako druhý argument zadejte při vytváření kontejneru, jako v následujícím příkladu kódu.

#include <list>

#include <allocators>

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

Uzly se přiděluje _List0 allocator_chunklist a výchozí filtr synchronizace.

Použijte makro ALLOCATOR_DECL (<allocators>) k vytváření šablon pro přidělování s jinou než výchozí filtry pro synchronizaci:

#include <list>

#include <allocators>

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

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

Uzly se přiděluje _Lst1 allocator_chunklist a sync_per_thread filtr synchronizace.

Alokace bloku je v mezipaměti nebo filtr.Mezipaměť je třída šablony, která přijímá jeden argument typu std::size_t.Definuje přidělování blok, který přiděluje a zruší přidělení bloky paměti jedné velikosti.Musí získat paměti pomocí operátoru new, ale nemusí díky samostatné volání operátoru new pro každý blok.To může například suballocate z větší blok nebo navrácen bloky pro následné rozdělení mezipaměti.

Hodnota argumentu _Sz, předán do mezipaměti členských funkcím s kompilátorem, který nelze kompilovat opětného navázání spojení, hodnota argumentu std::size_t když byla vytvořena šablona není nutně přidělit a navrátit.

<allocators> poskytuje následující šablony v mezipaměti:

Filtr je přidělování blok, který implementuje jeho členské funkce pomocí jiného přidělování blok, který je předáno jako argument šablony.Nejběžnější forma filtr je filtr synchronizace, který použije synchronizace zásady řízení přístupu do členské funkce instance jiné alokace bloku. <allocators> poskytuje následující filtry synchronizace:

<allocators> také obsahuje filtr rts_alloc, který drží více alokace bloku instance a určuje, která instance pro přidělování a navracení zpět za běhu, nikoli v době kompilace.Používá se s kompilátory, které nelze zkompilovat opětného navázání spojení.

Synchronizace zásad určuje, jak přidělování instance zpracovává souběžné požadavky přidělování a navracení zpět z více vláken.Nejjednodušší zásad je předat všechny požadavky přímo přes základní objekt mezipaměti ponechat správu synchronizace pro uživatele.Složitější zásad může být přístup k základní objekt mezipaměti serializovat pomocí objektu mutex.

Pokud kompilátor podporuje kompilace jednovláknové i vícevláknové aplikace, je výchozí filtr synchronizace pro jednovláknové aplikace sync_none; ve všech ostatních případech je sync_shared.

Mezipaměť šablony cache_freelist trvá max třída argument, který určuje maximální počet prvků, které mají být uloženy v seznamu zdarma.

<allocators> obsahuje následující třídy, max:

Makra

ALLOCATOR_DECL (<allocators>)

Poskytuje šablony třídy přidělování.

CACHE_CHUNKLIST (<allocators>)

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

CACHE_FREELIST (<allocators>)

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

CACHE_SUBALLOC (<allocators>)

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

SYNC_DEFAULT (<allocators>)

Dává filtr synchronizace.

Operátory

operator!= (<allocators>)

Testy pro nerovnost mezi objekty přidělování z dané třídy.

operator== (<allocators>)

Testy pro rovnost mezi objekty přidělování z dané třídy.

Třídy

allocator_base

Definuje základní třídu a běžné funkce, které jsou potřebné k vytvoření alokátorem definované uživatelem z filtru synchronizace.

allocator_chunklist

Popisuje objekt, který spravuje úložiště přidělení a uvolnění pro objekty používající mezipaměť typu cache_chunklist.

allocator_fixed_size

Popisuje objekt, který spravuje úložiště přidělení a uvolnění pro objekty typu Type použití mezipaměti typu cache_freelist s délkou spravuje max_fixed_size.

allocator_newdel

Implementuje přidělování, který používá operator delete Chcete-li navrátit paměti blok a operator new přidělit bloku paměti.

allocator_suballoc

Popisuje objekt, který spravuje úložiště přidělení a uvolnění pro objekty typu Type použití mezipaměti typu cache_suballoc.

allocator_unbounded

Popisuje objekt, který spravuje úložiště přidělení a uvolnění pro objekty typu Type použití mezipaměti typu cache_freelist s délkou spravuje max_unbounded.

allocator_variable_size

Popisuje objekt, který spravuje úložiště přidělení a uvolnění pro objekty typu Type použití mezipaměti typu cache_freelist s délkou spravuje max_variable_size.

cache_chunklist

Definuje přidělování blok, který přiděluje a zruší přidělení bloky paměti jedné velikosti.

cache_freelist

Definuje přidělování blok, který přiděluje a zruší přidělení bloky paměti jedné velikosti.

cache_suballoc

Definuje přidělování blok, který přiděluje a zruší přidělení bloky paměti jedné velikosti.

FreeList

Spravuje seznam bloků paměti.

max_fixed_size

Popisuje objekt třídy max, která omezuje freelist pevné maximální délky objektu.

max_none

Popisuje objekt třídy max, která omezuje freelist objektu, který má maximální délku 0.

max_unbounded

Popisuje objekt třídy max, který neomezuje maximální délku freelist objektu.

max_variable_size

Popisuje objekt třídy max, která omezuje freelist objektu, který má maximální délku, která je přibližně úměrné počtu přidělených bloků paměti.

rts_alloc

Popisuje šablony třídy rts_alloc Filtr obsahující matici mezipaměti instance a určuje, která instance pro přidělování a navracení zpět za běhu, nikoli v době kompilace.

sync_none

Popisuje filtr synchronizace, který poskytuje žádná synchronizace.

sync_per_container

Popisuje poskytující oddělené cache objektu pro každý objekt Alokátor filtr synchronizace.

sync_per_thread

Popisuje filtr synchronizace, který poskytuje samostatné mezipaměti objektu pro každý podproces.

sync_shared

Popisuje filtr synchronizace, který používá k řízení přístupu k objektu mezipaměti, které jsou sdíleny všechny allocators mutex.

Požadavky

Záhlaví:<allocators>

Obor názvů: stdext

Viz také

Další zdroje

Standardní knihovna C++ – hlavičkové soubory