<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
Poskytuje šablony třídy přidělování. |
|
Yields stdext::allocators::cache_chunklist<sizeof(Type)>. |
|
Yields stdext::allocators::cache_freelist<sizeof(Type), max>. |
|
Yields stdext::allocators::cache_suballoc<sizeof(Type)>. |
|
Dává filtr synchronizace. |
Operátory
Testy pro nerovnost mezi objekty přidělování z dané třídy. |
|
Testy pro rovnost mezi objekty přidělování z dané třídy. |
Třídy
Definuje základní třídu a běžné funkce, které jsou potřebné k vytvoření alokátorem definované uživatelem z filtru synchronizace. |
|
Popisuje objekt, který spravuje úložiště přidělení a uvolnění pro objekty používající mezipaměť typu cache_chunklist. |
|
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. |
|
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. |
|
Popisuje objekt, který spravuje úložiště přidělení a uvolnění pro objekty typu Type použití mezipaměti typu cache_suballoc. |
|
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. |
|
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. |
|
Definuje přidělování blok, který přiděluje a zruší přidělení bloky paměti jedné velikosti. |
|
Definuje přidělování blok, který přiděluje a zruší přidělení bloky paměti jedné velikosti. |
|
Definuje přidělování blok, který přiděluje a zruší přidělení bloky paměti jedné velikosti. |
|
Spravuje seznam bloků paměti. |
|
Popisuje objekt třídy max, která omezuje freelist pevné maximální délky objektu. |
|
Popisuje objekt třídy max, která omezuje freelist objektu, který má maximální délku 0. |
|
Popisuje objekt třídy max, který neomezuje maximální délku freelist objektu. |
|
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. |
|
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. |
|
Popisuje filtr synchronizace, který poskytuje žádná synchronizace. |
|
Popisuje poskytující oddělené cache objektu pro každý objekt Alokátor filtr synchronizace. |
|
Popisuje filtr synchronizace, který poskytuje samostatné mezipaměti objektu pro každý podproces. |
|
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