<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 new
kullanarak 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