Aracılığıyla paylaş


<allocators>

Düğüm tabanlı kapsayıcılar için bellek blokları ayırmaya ve boşaltmaya yardımcı olan çeşitli şablonlar tanımlar.

Sözdizimi

#include <allocators>

Not

<ayırıcılar> , Visual Studio 2019 sürüm 16.3'den başlayarak kullanım dışı bırakılmıştır.

Açıklamalar

<Ayırıcılar> üst bilgisi, düğüm tabanlı kapsayıcılar için bellek yönetimi stratejilerini seçmek için kullanılabilecek altı ayırıcı şablonu sağlar. Bu şablonlarla kullanmak için, bellek yönetimi stratejisini çeşitli çoklu iş parçacığı düzenlerine (hiçbiri dahil) uyarlamak için birkaç farklı eşitleme filtresi de sağlar. Bir bellek yönetimi stratejisini bellek kullanım desenleri ve eşitleme gereksinimleriyle eşleştirerek uygulamanızı hızlandırabilir veya bellek gereksinimlerini azaltabilirsiniz.

Ayırıcı şablonları, ek bellek yönetimi stratejileri sağlamak için özelleştirilebilen veya değiştirilebilen yeniden kullanılabilir bileşenlerle uygulanır.

C++ Standart Kitaplığı'ndaki düğüm tabanlı kapsayıcılar (std::list, std::set, std::multiset, std::map ve std::multimap) öğelerini tek tek düğümlerde depolar. Belirli bir kapsayıcı türü için tüm düğümler aynı boyuttadır, bu nedenle genel amaçlı bellek yöneticisi esnekliği gerekmez. Her bellek bloğunun boyutu derleme zamanında bilindiğinden, bellek yöneticisi çok daha basit ve daha hızlı olabilir.

Düğüm tabanlı olmayan kapsayıcılarla kullanıldığında (örneğin, C++ Standart Kitaplık kapsayıcıları std::vector std::d eque ve std::basic_string), ayırıcı şablonları düzgün çalışır, ancak varsayılan ayırıcı üzerinde herhangi bir performans iyileştirmesi sağlama olasılığı yoktur.

Ayırıcı, belirlenmiş türde nesneler ve nesne dizileri için depolama ayırmayı ve boşaltmayı yöneten bir nesneyi tanımlayan bir sınıf şablonudur. Ayırıcı nesneleri, C++ Standart Kitaplığı'ndaki çeşitli kapsayıcı sınıfı şablonları tarafından kullanılır.

Ayırıcılar bu türdeki tüm şablonlardır:

template<class Type>
class allocator;

burada şablon bağımsız değişkeni Type ayırıcı örneği tarafından yönetilen türdür. C++ Standart Kitaplığı, bellekte <>tanımlanan bir varsayılan ayırıcı, sınıf şablonu ayırıcısı sağlar. <Ayırıcılar> üst bilgisi aşağıdaki ayırıcıları sağlar:

Aşağıdaki kod örneği gibi kapsayıcı oluştururken ikinci tür bağımsız değişkeni olarak ayırıcının uygun bir örneğini kullanın.

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

_List0 ve varsayılan eşitleme filtresi ile allocator_chunklist düğümler ayırır.

Varsayılan dışında eşitleme filtreleriyle ayırıcı şablonları oluşturmak için makro ALLOCATOR_DECL kullanın:

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

_Lst1 ve sync_per_thread eşitleme filtresi ile allocator_chunklist düğümler ayırır.

Blok ayırıcısı bir önbellek veya filtredir. Önbellek, std::size_t türünde bir bağımsız değişken alan bir sınıf şablonudur. Tek boyuttaki bellek bloklarını ayıran ve serbest bırakacak bir blok ayırıcı tanımlar. işlecini newkullanarak belleği alması gerekir, ancak her blok için ayrı bir işleç new çağrısı yapması gerekmez. Örneğin, daha büyük bir bloktan suballocate veya sonraki yeniden ayırma için önbellek serbest blokları.

Şablon örneği oluşturulurken kullanılan std::size_t bağımsız değişkeninin değerini yeniden birleştiremeyen bir derleyicide, önbelleğin üye işlevlerine geçirilen _Sz bağımsız değişkenin değeri ayırma ve serbest bırakma zorunlu değildir.

<ayırıcılar> aşağıdaki önbellek şablonlarını sağlar:

Filtre, üye işlevlerini şablon bağımsız değişkeni olarak geçirilen başka bir blok ayırıcı kullanarak uygulayan bir blok ayırıcısıdır. En yaygın filtre biçimi, başka bir blok ayırıcı örneğinin üye işlevlerine erişimi denetlemek için eşitleme ilkesi uygulayan bir eşitleme filtresidir. <ayırıcılar> aşağıdaki eşitleme filtrelerini sağlar:

<ayırıcılar> ayrıca birden çok blok ayırıcı örneğini tutan ve derleme zamanı yerine çalışma zamanında ayırma veya serbest bırakma için hangi örneğin kullanılacağını belirleyen filtre rts_alloc sağlar. Yeniden bağlama derlemesi yapamayan derleyicilerle birlikte kullanılır.

Eşitleme ilkesi, ayırıcı örneğin birden çok iş parçacığından gelen eşzamanlı ayırma ve serbest bırakma isteklerini nasıl işlediğini belirler. En basit ilke, tüm istekleri doğrudan temel alınan önbellek nesnesine geçirerek eşitleme yönetimini kullanıcıya bırakmaktır. Temel alınan önbellek nesnesine erişimi seri hale getirmek için bir mutex kullanmak daha karmaşık bir ilke olabilir.

Derleyici hem tek iş parçacıklı hem de çok iş parçacıklı uygulamaların derlenmesini destekliyorsa, tek iş parçacıklı uygulamalar için varsayılan eşitleme filtresi olur sync_none; diğer tüm durumlarda olur sync_shared.

Önbellek şablonu cache_freelist , ücretsiz listede depolanacak en fazla öğe sayısını belirleyen en yüksek sınıf bağımsız değişkenini alır.

<ayırıcılar> aşağıdaki maksimum sınıfları sağlar:

Makrolar

Makro Açıklama
ALLOCATOR_DECL Ayırıcı sınıf şablonu verir.
CACHE_CHUNKLIST Verimleri stdext::allocators::cache_chunklist<sizeof(Type)>.
CACHE_FREELIST Verimleri stdext::allocators::cache_freelist<sizeof(Type), max>.
CACHE_SUBALLOC Verimleri stdext::allocators::cache_suballoc<sizeof(Type)>.
SYNC_DEFAULT Eşitleme filtresi verir.

İşleçler

Operator Açıklama
operator!= (<ayırıcılar>) Belirtilen sınıfın ayırıcı nesneleri arasındaki eşitsizliği sınar.
operator== (<ayırıcılar>) Belirtilen sınıfın ayırıcı nesneleri arasındaki eşitliği sınar.

Sınıflar

Sınıf Açıklama
allocator_base Bir eşitleme filtresinden kullanıcı tanımlı ayırıcı oluşturmak için gereken temel sınıfı ve ortak işlevleri tanımlar.
allocator_chunklist cache_chunklist türünde bir önbellek kullanarak depolama ayırmayı ve nesneler için boşaltmayı yöneten bir nesneyi açıklar.
allocator_fixed_size max_fixed_size tarafından yönetilen uzunluğuyla cache_freelist türünde Type bir önbellek kullanarak türdeki nesneler için depolama ayırmayı ve boşaltmayı yöneten bir nesneyi açıklar.
allocator_newdel Bellek bloğunu serbest bırakmak için işleç silme ve bellek bloğu ayırmak için yeni işleç kullanan bir ayırıcı uygular.
allocator_suballoc cache_suballoc türünde bir önbellek kullanarak depolama ayırmayı ve türdeki Type nesneler için boşaltmayı yöneten bir nesneyi açıklar.
allocator_unbounded max_unbounded tarafından yönetilen uzunluğuyla cache_freelist türünde Type bir önbellek kullanarak depolama ayırmayı ve türdeki nesneler için boşaltmayı yöneten bir nesneyi açıklar.
allocator_variable_size max_variable_size tarafından yönetilen uzunluğuyla cache_freelist türünde Type bir önbellek kullanarak türdeki nesneler için depolama ayırmayı ve boşaltmayı yöneten bir nesneyi açıklar.
cache_chunklist Tek boyuttaki bellek bloklarını ayıran ve serbest bırakacak bir blok ayırıcı tanımlar.
cache_freelist Tek boyuttaki bellek bloklarını ayıran ve serbest bırakacak bir blok ayırıcı tanımlar.
cache_suballoc Tek boyuttaki bellek bloklarını ayıran ve serbest bırakacak bir blok ayırıcı tanımlar.
serbest liste Bellek bloklarının listesini yönetir.
max_fixed_size Serbest liste nesnesini sabit bir maksimum uzunlukla sınırlayan en yüksek sınıf nesnesini açıklar.
max_none Serbest liste nesnesini en fazla sıfır uzunluğuyla sınırlayan en yüksek sınıf nesnesini açıklar.
max_unbounded Serbest liste nesnesinin uzunluk üst sınırını sınırlamayan en yüksek sınıf nesnesini açıklar.
max_variable_size Serbest liste nesnesini, ayrılmış bellek bloklarının sayısıyla kabaca orantılı olan maksimum uzunlukla sınırlayan bir en yüksek sınıf nesnesini açıklar.
rts_alloc rts_alloc sınıf şablonu, bir dizi önbellek örneğini barındıran bir filtreyi açıklar ve derleme zamanında değil çalışma zamanında ayırma ve serbest bırakma için hangi örneğin kullanılacağını belirler.
sync_none Eşitleme sağlamayan bir eşitleme filtresi açıklar.
sync_per_container Her ayırıcı nesnesi için ayrı bir önbellek nesnesi sağlayan bir eşitleme filtresi açıklar.
sync_per_thread Her iş parçacığı için ayrı bir önbellek nesnesi sağlayan bir eşitleme filtresi açıklar.
sync_shared Ayırıcılar tarafından paylaşılan bir önbellek nesnesine erişimi denetlemek için bir mutex kullanan eşitleme filtresini açıklar.

Gereksinimler

Üst bilgi:<ayırıcılar>

Ad alanı: stdext

Ayrıca bkz.

Üst Bilgi Dosyaları Başvurusu