Sdílet prostřednictvím


<allocators>

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

Syntaxe

#include <allocators>

Poznámka

<alokátory> jsou zastaralé, počínaje sadou Visual Studio 2019 verze 16.3.

Poznámky

Hlavička <alokátorů poskytuje šest šablon alokátoru> , které lze použít k výběru strategií správy paměti pro kontejnery založené na uzlech. Pro použití s těmito šablonami poskytuje také několik různých synchronizačních filtrů pro přizpůsobení strategie správy paměti různým schématům multithreadingu (včetně žádné). Aplikaci můžete urychlit nebo snížit její požadavky na paměť tím, že odpovídá strategii správy paměti se vzory využití paměti a požadavky na synchronizaci.

Šablony alokátoru jsou implementovány s opakovaně použitelnými komponentami, které je možné přizpůsobit nebo nahradit, aby poskytovaly další strategie správy paměti.

Kontejnery založené na uzlech ve standardní knihovně C++ (std::list, std::set, std::multiset, std::map a std::multimap) ukládají své prvky do jednotlivých uzlů. Všechny uzly pro konkrétní typ kontejneru mají stejnou velikost, takže není nutná flexibilita správce paměti pro obecné účely. Vzhledem k tomu, že velikost každého bloku paměti je známa v době kompilace, může být správce paměti mnohem jednodušší a rychlejší.

Při použití s kontejnery, které nejsou založené na uzlech (například kontejnery standardní knihovny C++ std::vector std::d eque a std::basic_string), šablony alokátoru budou fungovat správně, ale nebudou pravděpodobně poskytovat žádné zlepšení výkonu oproti výchozímu alokátoru.

Alokátor je šablona třídy, která popisuje objekt, který spravuje přidělení úložiště a uvolní objekty a pole objektů určeného typu. Objekty alokátoru jsou používány několika šablonami tříd kontejneru ve standardní knihovně C++.

Alokátory jsou všechny šablony tohoto typu:

template<class Type>
class allocator;

kde argument Type šablony je typ spravovaný instancí alokátoru. Standardní knihovna jazyka C++ poskytuje výchozí alokátor šablony třídy, který je definován v< paměti>. Hlavička <alokátorů poskytuje následující alokátory> :

Při vytváření kontejneru použijte odpovídající instanci alokátoru jako druhý argument typu, například následující příklad kódu.

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

_List0 přiděluje uzly s výchozím synchronizačním filtrem allocator_chunklist .

Pomocí ALLOCATOR_DECL makra vytvořte šablony alokátoru s jinými filtry synchronizace, než je výchozí:

#include <list>
#include <allocators>
ALLOCATOR_DECL(CACHE_CHUNKLIST, stdext::allocators::sync_per_thread, Alloc);
std::list<int, alloc<int> > _List1;

_Lst1 přiděluje uzly s filtrem allocator_chunklist synchronizace sync_per_thread.

Blokový alokátor je mezipaměť nebo filtr. Mezipaměť je šablona třídy, která přebírá jeden argument typu std::size_t. Definuje blokový alokátor, který přiděluje a uvolní bloky paměti jedné velikosti. Musí získat paměť pomocí operátoru new, ale nemusí provádět samostatné volání operátor new pro každý blok. Může například suballokovat z větších bloků nebo uvolněných bloků mezipaměti pro následnou relokaci.

S kompilátorem, který nemůže znovu připojit hodnotu argumentu std::size_t použitý při vytvoření instance šablony, nemusí nutně být hodnota argumentu _Sz předána členům funkcí mezipaměti přidělení a uvolnění.

<alokátory> poskytují následující šablony mezipaměti:

Filtr je blokový alokátor, který implementuje své členské funkce pomocí jiného alokátoru bloku, který se předá jako argument šablony. Nejběžnější formou filtru je synchronizační filtr, který používá zásady synchronizace pro řízení přístupu k členským funkcím instance jiného blokového alokátoru. <alokátory> poskytují následující filtry synchronizace:

<alokátory> také poskytují filtr rts_alloc, který obsahuje více instancí alokátoru bloků a určuje, která instance se má použít pro přidělení nebo uvolnění za běhu místo v době kompilace. Používá se s kompilátory, které nemohou zkompilovat rebind.

Zásady synchronizace určují, jak instance alokátoru zpracovává souběžné žádosti o přidělení a uvolnění z více vláken. Nejjednodušší zásadou je předat všechny požadavky přímo do základního objektu mezipaměti a ponechat správu synchronizace uživateli. Složitější zásadou může být použití mutex k serializaci přístupu k základnímu objektu mezipaměti.

Pokud kompilátor podporuje kompilování jednovláknových i vícevláknových aplikací, výchozí synchronizační filtr pro jednovláknové aplikace je sync_none; pro všechny ostatní případy je sync_shared.

Šablona cache_freelist mezipaměti přebírá argument maximální třídy, který určuje maximální počet prvků, které mají být uloženy v seznamu free.

<alokátory> poskytují následující maximální třídy:

Makra

Makro Popis
ALLOCATOR_DECL Vytvoří šablonu třídy alokátoru.
CACHE_CHUNKLIST Výnosy stdext::allocators::cache_chunklist<sizeof(Type)>.
CACHE_FREELIST Výnosy stdext::allocators::cache_freelist<sizeof(Type), max>.
CACHE_SUBALLOC Výnosy stdext::allocators::cache_suballoc<sizeof(Type)>.
SYNC_DEFAULT Vytvoří filtr synchronizace.

Operátory

Operátor Popis
operator!= (<alokátory>) Testy pro nerovnost mezi objekty přidělování z dané třídy.
operator== (<alokátory>) Testy pro rovnost mezi objekty přidělování z dané třídy.

Třídy

Třída Popis
allocator_base Definuje základní třídu a běžné funkce potřebné k vytvoření uživatelem definovaného alokátoru z synchronizačního filtru.
allocator_chunklist Popisuje objekt, který spravuje přidělení úložiště a uvolní objekty pomocí mezipaměti typu cache_chunklist.
allocator_fixed_size Popisuje objekt, který spravuje přidělení úložiště a uvolní objekty typu Type pomocí mezipaměti typu cache_freelist s délkou spravovanou max_fixed_size.
allocator_newdel Implementuje alokátor, který používá operátor delete k uvolnění bloku paměti a operátoru nové přidělení bloku paměti.
allocator_suballoc Popisuje objekt, který spravuje přidělení úložiště a uvolní objekty typu Type pomocí mezipaměti typu cache_suballoc.
allocator_unbounded Popisuje objekt, který spravuje přidělení úložiště a uvolní objekty typu Type pomocí mezipaměti typu cache_freelist s délkou spravovanou max_unbounded.
allocator_variable_size Popisuje objekt, který spravuje přidělení úložiště a uvolní objekty typu Type pomocí mezipaměti typu cache_freelist s délkou spravovanou max_variable_size.
cache_chunklist Definuje blokový alokátor, který přiděluje a uvolní bloky paměti jedné velikosti.
cache_freelist Definuje blokový alokátor, který přiděluje a uvolní bloky paměti jedné velikosti.
cache_suballoc Definuje blokový alokátor, který přiděluje a uvolní bloky paměti jedné velikosti.
freelist Spravuje seznam paměťových bloků.
max_fixed_size Popisuje objekt maximální třídy, který omezuje objekt freelist na pevnou maximální délku.
max_none Popisuje objekt maximální třídy, který omezuje objekt freelist na maximální délku nuly.
max_unbounded Popisuje objekt maximální třídy, který neomezuje maximální délku objektu freelist .
max_variable_size Popisuje objekt maximální třídy, který omezuje volný seznam objektu na maximální délku, která je zhruba úměrná počtu přidělených bloků paměti.
rts_alloc Šablona třídy rts_alloc popisuje filtr , který obsahuje pole instancí mezipaměti a určuje, která instance se má použít pro přidělení a uvolnění za běhu místo v době kompilace.
sync_none Popisuje filtr synchronizace, který neposkytuje žádnou synchronizaci.
sync_per_container Popisuje synchronizační filtr, který poskytuje samostatný objekt mezipaměti pro každý objekt alokátoru.
sync_per_thread Popisuje synchronizační filtr, který poskytuje samostatný objekt mezipaměti pro každé vlákno.
sync_shared Popisuje synchronizační filtr, který používá mutex k řízení přístupu k objektu mezipaměti, který je sdílen všemi alokátory.

Požadavky

Záhlaví:<alokátory>

Obor názvů: stdext

Viz také

Referenční informace k souborům hlaviček