Udostępnij za pośrednictwem


<allocators>

Definiuje kilka szablonów, które pomagają przydzielić i wolnych bloków pamięci dla kontenerów na węźle.

#include <allocators>

Uwagi

<allocators> Nagłówek zawiera sześć szablonów programu przydzielania używane zaznacz strategii zarządzania pamięcią oparte na węźle pojemników.Użyj 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łączając brak).Dopasowanie strategii zarządzania pamięci wzorców użycia pamięci znane i synchronizacji wymagania określonej 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 strategie zarządzania pamięcią dodatkowe.

Pojemniki na węzeł w bibliotece Standard C++ (std::list, std::set, std::multiset, std::map i std::multimap) przechowywanie ich elementów w poszczególnych węzłach.Wszystkich węzłów typu kontenerem są tego samego rozmiaru, więc elastyczność Menedżera pamięci ogólnego przeznaczenia nie jest potrzebny.Ponieważ rozmiar każdego bloku pamięci jest znany w czasie kompilacji, Menedżer pamięci może być znacznie łatwiejsze i szybsze.

Używane z kontenerów, które nie są oparte węzła (na przykład Standard C++ library kontenerów std::vector std::deque i std::basic_string), szablony alllocator będzie działać poprawnie, ale prawdopodobnie nie zapewniają poprawy wydajności przez program przydzielania domyślne.

Program przydzielania jest klasa szablonu, opisującą obiekt, który zarządza przydział magazynowania i zwalnianie obiektów i tablic obiektów typu wyznaczone.Program przydzielania obiekty są używane przez kilka klas szablonu pojemnika w bibliotece Standard C++.

Allocators są wszystkie szablony tego typu:

template<class Type>

class allocator;

Jeżeli argument szablonu Type jest typem zarządzane przez wystąpienie programu przydzielania.Biblioteka standardowych C++ zapewnia domyślne przydzielania, szablonu klasy przydzielania, który jest zdefiniowany w <memory>.<allocators> Nagłówek zawiera następujące allocators:

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

#include <list>

#include <allocators>

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

_List0 przydziela węzły z allocator_chunklist i domyślny filtr synchronizacji.

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

#include <list>

#include <allocators>

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

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

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

Alokator bloku jest pamięci podręcznej lub filtru.Pamięć podręczna jest klasa szablonu, która pobiera jeden argument typu std::size_t.Definiuje przydzielania bloku, który przydziela i zwalnia bloków pamięci pojedynczego rozmiaru.Musi 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ększych blok lub bloki o kolejnych ponowny dealokowane w pamięci podręcznej.

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

<allocators> udostępnia następujące szablony w pamięci podręcznej:

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

<allocators> Filtr jest także rts_alloc, który posiada wiele przydzielania bloku wystąpień i określa, które wystąpienie dla alokacji lub dezalokacji w czasie wykonywania, zamiast w czasie kompilacji.Jest używany kompilatory, których nie można skompilować ponownego wiązania.

Zasada synchronizacji Określa, jak instancję programu przydzielania obsługuje jednoczesnych żądań alokacji i dezalokacji z wielu wątków.Najprostszy zasad jest przekazać bezpośrednio wszystkie żądania za pośrednictwem obiektu źródłowego pamięci podręcznej, pozostawiając zarządzania synchronizacji dla użytkownika.Bardziej złożonych zasad mogłoby być szeregować dostęp do pamięci podręcznej obiektu źródłowego za pomocą obiektu mutex.

Jeśli kompilator obsługuje opracowywanie aplikacji jednowątkowych 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 w wolne listy.

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

Ee292134.collapse_all(pl-pl,VS.110).gifMakra

ALLOCATOR_DECL (<allocators>)

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

Plony filtr synchronizacji.

Ee292134.collapse_all(pl-pl,VS.110).gifOperatory

operator!= (<allocators>)

Testy nierówności między obiektami programu przydzielania określonej klasy.

operator== (<allocators>)

Testy dla równości między obiektami programu przydzielania określonej klasy.

Ee292134.collapse_all(pl-pl,VS.110).gifKlasy

allocator_base

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

allocator_chunklist

Zawiera opis obiektu, który zarządza przydział magazynowania i zwalnianie obiektów przy użyciu buforu typu cache_chunklist.

allocator_fixed_size

Zawiera opis obiektu, który zarządza przydział magazynowania i zwalnianie obiektów typu Type przy użyciu buforu typu cache_freelist o długości zarządzane przez max_fixed_size.

allocator_newdel

Implementuje przydzielania, który używa operator delete do dezalokuj pamięć bloku i operator new przydzielić bloku pamięci.

allocator_suballoc

Zawiera opis obiektu, który zarządza przydział magazynowania i zwalnianie obiektów typu Type przy użyciu buforu typu cache_suballoc.

allocator_unbounded

Zawiera opis obiektu, który zarządza przydział magazynowania i zwalnianie obiektów typu Type przy użyciu buforu typu cache_freelist o długości zarządzane przez max_unbounded.

allocator_variable_size

Zawiera opis obiektu, który zarządza przydział magazynowania i zwalnianie obiektów typu Type przy użyciu buforu typu cache_freelist o długości zarządzane przez max_variable_size.

cache_chunklist

Definiuje przydzielania bloku, który przydziela i zwalnia bloków pamięci pojedynczego rozmiaru.

cache_freelist

Definiuje przydzielania bloku, który przydziela i zwalnia bloków pamięci pojedynczego rozmiaru.

cache_suballoc

Definiuje przydzielania bloku, który przydziela i zwalnia bloków pamięci pojedynczego rozmiaru.

elementu FreeList

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

max_fixed_size

Zawiera opis obiektu max klasy, która ogranicza elementu freelist obiekt ustaloną długość maksymalna.

max_none

Zawiera opis obiektu max klasy, która ogranicza elementu freelist obiektu maksymalną długość równą zero.

max_unbounded

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

max_variable_size

Zawiera opis obiektu max klasy, która ogranicza elementu freelist obiektu maksymalną długość, która jest w przybliżeniu proporcjonalna do liczby przydzielonych bloków pamięci.

rts_alloc

Zawiera opis szablonu klasy rts_alloc filtru przechowuje tablicy pamięci podręcznej wystąpień i określa, które wystąpienie dla przydziału i dezalokacji w czasie wykonywania, zamiast w czasie kompilacji.

sync_none

Opisuje filtr synchronizacji, który zapewnia synchronizacja nie.

sync_per_container

Opisuje filtr synchronizacji, który zapewnia obiektu oddzielnym pamięci podręcznej dla każdego obiektu programu przydzielania.

sync_per_thread

Opisuje filtr synchronizacji, który zapewnia obiektu oddzielnym pamięci podręcznej dla każdego wątku.

sync_shared

Opisuje 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 allocators.

Wymagania

Nagłówek: <allocators>

Obszar nazw: stdext

Zobacz też

Inne zasoby

Pliki nagłówków