Udostępnij za pośrednictwem


<allocators>

Definiuje kilka szablonów, które pomagają przydzielić i wolne bloki pamięci do kontenerów opartego na węźle.

#include <allocators>

Uwagi

<Allocators> nagłówek zawiera sześć szablony programu przydzielania, które pozwalają wybrać strategie zarządzania pamięcią oparte na węzłach kontenerów.Do użytku z tych szablonów zawiera także kilka filtrów synchronizacji różnych dostosować strategii zarządzania pamięcią do szeregu różnych systemów wielowątkowości (w tym brak).Dopasowanie strategii zarządzania pamięci do wzorów użycia pamięci znanych i wymagania synchronizacji konkretnej aplikacji często można zwiększyć szybkość lub zmniejszyć ogólne wymagania dotyczące pamięci aplikacji.

Szablony programu przydzielania są implementowane przy użyciu składniki wielokrotnego użytku, które mogą być dostosowane lub zastąpione zapewnienie dodatkowego zarządzania pamięcią strategii.

Oparty na węzłach kontenerów w Standard C++ library (kontener std::list, kontener std::set, std::multiset, std::map i std::multimap) przechowywania ich elementów w poszczególnych węzłach.Wszystkie węzły typu kontenerem mają taki sam rozmiar, więc elastyczność Menedżer pamięci ogólnego przeznaczenia nie jest potrzebny.Ponieważ rozmiar bloku pamięci jest znany w czasie kompilacji, Menedżer pamięci może być znacznie prostsza i szybsza.

Gdy używana z kontenerów, które nie są oparte na węzłach (np. Standard C++ library kontenerów obiekt Vector std::deque i std::basic_string), szablony alllocator będzie działać poprawnie, ale nie są mogących zapewnić żadnej poprawy wydajności przez domyślny program przydzielania.

Alokator próbek jest szablon klasy, która zawiera opis obiektu, który zarządza przydzielaniem zasobów magazynowania i zwalnianie obiektów i tablic obiektów typu wyznaczone.Program przydzielania obiekty są używane przez kilka klas szablon pojemnika w Standard C++ library.

Selektory są wszystkie szablony tego typu:

template<class Type>

class allocator;

Jeżeli argument szablon Type jest typ zarządzany przez wystąpienie programu przydzielania.Standard C++ library zawiera domyślny program przydzielania, szablonu klasy programu przydzielania, który jest zdefiniowany w <memory>.<Allocators> nagłówek zawiera następujące selektory:

Podczas tworzenia kontenera, na przykład w poniższym przykładzie kodu należy użyć odpowiednich podczas tworzenia wystąpienia programu przydzielania jako drugi argument typu.

#include <list>

#include <allocators>

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

Węzły z przydziela _List0 allocator_chunklist i domyślnego filtru synchronizacji.

Użyć makra ALLOCATOR_DECL (<allocators>) do tworzenia szablonów programu przydzielania z filtrów synchronizacji innych niż domyślne:

#include <list>

#include <allocators>

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

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

Węzły z przydziela _Lst1 allocator_chunklist i sync_per_thread filtr synchronizacji.

Mechanizm przydzielania bloków jest pamięci podręcznej lub filtru.Pamięć podręczna jest klasą szablonu, który pobiera jeden argument typu std::size_t.Definiuje przydzielania bloku, który przydziela i zwalnia bloków pamięci jednego rozmiaru.Musisz uzyskać pamięci za pomocą operatora new, ale nie potrzebują sporządzać oddzielne wywołanie operatora new dla każdego bloku.Może na przykład alokacje podrzędne z większy blok lub dealokowane bloki dla kolejnych ponowny przydział pamięci podręcznej.

Z kompilatorem, że nie można skompilować ponownego wiązania, wartość argumentu std::size_t używany podczas wystąpienia szablonu nie jest koniecznie wartość _Sz argument przekazany do funkcji elementów członkowskich pamięci podręcznej przydzielić i deallocate.

<selektory> zawiera następujące szablony pamięci podręcznej:

Filtr jest program przydzielania bloku, który implementuje jego funkcji elementów członkowskich przy użyciu innego programu przydzielania bloku, który jest przekazywany do niej jako argumentu szablon.Najbardziej powszechną formą filtr jest filtr synchronizacji, który stosuje zasady synchronizacji do kontrolowania dostępu do funkcji elementów członkowskich wystąpienia innego przydzielania bloku. <allocators> zawiera następujące filtry synchronizacji:

<selektory> zapewnia również filtr rts_alloc, który posiada wiele przydzielania bloku wystąpień i określa, które wystąpienie dla alokacji lub dezalokacji w czasie wykonywania, a nie w czasie kompilacji.Jest używany z kompilatorów, których nie można skompilować ponownego wiązania.

Zasada synchronizacji Określa, jak wystąpienie programu przydzielania obsługuje jednoczesnych żądań alokacji i dezalokacji z wielu wątków.Najprostszy zasad jest przekazanie wszystkich żądań bezpośrednio przez do podstawowej obiektu pamięci podręcznej, pozostawiając zarządzania synchronizacji dla użytkownika.Bardziej złożonych zasad można serializować dostęp do pamięci podręcznej obiektu źródłowego za pomocą obiektu mutex.

Jeśli kompilator obsługuje Kompilowanie aplikacji zarówno pojedynczym wątku i wielowątkowych, domyślny filtr synchronizacji dla aplikacji jednowątkowych jest sync_none; we wszystkich innych przypadkach jest sync_shared.

Szablon pamięci podręcznej cache_freelist przyjmuje argument max klasy, która określa maksymalną liczbę elementów, które mają być przechowywane na liście wolne.

<selektory> zawiera następujące klasy max:

Makra

ALLOCATOR_DECL (<allocators>)

Daje w wyniku alokatora szablonu klasy.

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>)

Daje w wyniku filtr synchronizacji.

Operatory

operator!= (<allocators>)

Testy dla nierówności pomiędzy obiektami alokatora określonej klasy.

operator== (<allocators>)

Testy dla równości pomiędzy obiektami alokatora określonej klasy.

Klasy

allocator_base

Definiuje klasy podstawowej i typowe funkcje potrzebne do stworzenia programu przydzielania użytkownika z filtru synchronizacji.

allocator_chunklist

Zawiera opis obiektu, który zarządza przydzielaniem zasobów magazynowania i zwalnianie obiektów przy użyciu pamięci podręcznej typu cache_chunklist.

allocator_fixed_size

Zawiera opis obiektu, który zarządza przydzielaniem zasobów magazynowania i zwalniania dla obiektów typu Type przy użyciu pamięci podręcznej typu cache_freelist o długości zarządzane przez max_fixed_size.

allocator_newdel

Implementuje przydzielania, który używa operator delete należy cofnąć pamięci blok i operator new przydzielić bloku pamięci.

allocator_suballoc

Zawiera opis obiektu, który zarządza przydzielaniem zasobów magazynowania i zwalniania dla obiektów typu Type przy użyciu pamięci podręcznej typu cache_suballoc.

allocator_unbounded

Zawiera opis obiektu, który zarządza przydzielaniem zasobów magazynowania i zwalniania dla obiektów typu Type przy użyciu pamięci podręcznej typu cache_freelist o długości zarządzane przez max_unbounded.

allocator_variable_size

Zawiera opis obiektu, który zarządza przydzielaniem zasobów magazynowania i zwalniania dla obiektów typu Type przy użyciu pamięci podręcznej typu cache_freelist o długości zarządzane przez max_variable_size.

cache_chunklist

Określa program przydzielania bloku, który przydziela i zwalnia bloków pamięci jednego rozmiaru.

cache_freelist

Określa program przydzielania bloku, który przydziela i zwalnia bloków pamięci jednego rozmiaru.

cache_suballoc

Określa program przydzielania bloku, który przydziela i zwalnia bloków pamięci jednego rozmiaru.

elementu FreeList

Zarządza listą bloków pamięci.

max_fixed_size

W tym artykule opisano max klasy obiekt, który ogranicza elementu freelist obiektu do stałej długości maksymalnej.

max_none

W tym artykule opisano max klasy obiekt, który ogranicza elementu freelist obiekt, aby maksymalna długość równą zero.

max_unbounded

W tym artykule opisano max klasy obiekt, który nie ogranicza maksymalną długość elementu freelist obiektu.

max_variable_size

W tym artykule opisano max klasy obiekt, który ogranicza elementu freelist obiektu maksymalną długość, która jest wprost proporcjonalny do liczby przydzielonych bloków pamięci.

rts_alloc

Zawiera opis szablonu klasy rts_alloc Filtr przechowuje tablicę pamięci podręcznej obiektów i określa, które wystąpienie dla alokacji i dezalokacji w czasie wykonywania, a nie w czasie kompilacji.

sync_none

W tym artykule opisano filtr synchronizacji, który zapewnia nie synchronizacji.

sync_per_container

Opis filtru synchronizacji, który dostarcza obiekt oddzielnych pamięci podręcznej dla każdego obiektu programu przydzielania.

sync_per_thread

Opis filtru synchronizacji, który dostarcza obiekt oddzielnych pamięci podręcznej dla każdego wątku.

sync_shared

W tym artykule opisano filtr synchronizacji, który używa obiektu mutex do kontrolowania dostępu do obiektu pamięci podręcznej, który jest współużytkowany przez wszystkie selektory.

Wymagania

Nagłówek:<allocators>

Przestrzeń nazw: stdext

Zobacz też

Inne zasoby

Pliki nagłówkowe standardowej biblioteki języka C++