<allocators>

Menentukan beberapa templat yang membantu mengalokasikan dan membebaskan blok memori untuk kontainer berbasis simpul.

Sintaksis

#include <allocators>

Catatan

<alokator> tidak digunakan lagi, dimulai dengan Visual Studio 2019 versi 16.3.

Keterangan

Header <alokator> menyediakan enam templat alokator yang dapat digunakan untuk memilih strategi manajemen memori untuk kontainer berbasis simpul. Untuk digunakan dengan templat ini, ini juga menyediakan beberapa filter sinkronisasi yang berbeda untuk menyesuaikan strategi manajemen memori dengan berbagai skema multithreading yang berbeda (termasuk tidak ada). Anda dapat mempercepat aplikasi, atau mengurangi persyaratan memorinya, dengan mencocokkan strategi manajemen memori dengan pola penggunaan memori dan persyaratan sinkronisasinya.

Templat alokator diimplementasikan dengan komponen yang dapat digunakan kembali yang dapat disesuaikan atau diganti untuk memberikan strategi manajemen memori tambahan.

Kontainer berbasis simpul di Pustaka Standar C++ (std::list, std::set, std::multiset, std::map, dan std::multimap) menyimpan elemennya dalam simpul individual. Semua node untuk jenis kontainer tertentu berukuran sama, sehingga fleksibilitas manajer memori tujuan umum tidak diperlukan. Karena ukuran setiap blok memori diketahui pada waktu kompilasi, manajer memori bisa jauh lebih sederhana dan lebih cepat.

Ketika digunakan dengan kontainer yang bukan berbasis node (seperti kontainer Pustaka Standar C++ std::vector std::d eque, dan std::basic_string), templat alokator akan berfungsi dengan benar, tetapi tidak mungkin memberikan peningkatan performa apa pun atas alokator default.

Alokator adalah templat kelas yang menjelaskan objek yang mengelola alokasi penyimpanan dan membebaskan objek dan array objek dari jenis yang ditunjuk. Objek alokator digunakan oleh beberapa templat kelas kontainer di Pustaka Standar C++.

Semua alokator adalah templat jenis ini:

template<class Type>
class allocator;

di mana argumen Type templat adalah jenis yang dikelola oleh instans alokator. Pustaka Standar C++ menyediakan alokator default, alokator templat kelas, yang didefinisikan dalam <memori>. Header <alokator> menyediakan alokator berikut:

Gunakan instans yang sesuai dari alokator sebagai argumen jenis kedua saat membuat kontainer, seperti contoh kode berikut.

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

_List0 mengalokasikan simpul dengan allocator_chunklist dan filter sinkronisasi default.

Gunakan ALLOCATOR_DECL makro untuk membuat templat alokator dengan filter sinkronisasi selain default:

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

_Lst1 mengalokasikan simpul dengan allocator_chunklist dan filter sinkronisasi sync_per_thread .

Alokator blok adalah cache atau filter. Cache adalah templat kelas yang mengambil satu argumen jenis std::size_t. Ini mendefinisikan alokator blok yang mengalokasikan dan membatalkan alokasi blok memori dengan satu ukuran. Ini harus mendapatkan memori menggunakan operator new, tetapi tidak perlu melakukan panggilan terpisah ke operator new untuk setiap blok. Ini mungkin, misalnya, suballocate dari blok yang lebih besar atau blok cache yang dibatalkan alokasinya untuk realokasi berikutnya.

Dengan pengkompilasi yang tidak dapat mengikat kembali nilai argumen std::size_t yang digunakan ketika templat dibuat belum tentu nilai argumen _Sz diteruskan ke fungsi anggota cache yang mengalokasikan dan membatalkan alokasi.

<alokator> menyediakan templat cache berikut:

Filter adalah alokator blok yang mengimplementasikan fungsi anggotanya menggunakan alokator blok lain, yang diteruskan sebagai argumen templat. Bentuk filter yang paling umum adalah filter sinkronisasi, yang menerapkan kebijakan sinkronisasi untuk mengontrol akses ke fungsi anggota instans alokator blok lain. <alokator> menyediakan filter sinkronisasi berikut:

<alokator> juga menyediakan filter rts_alloc, yang menyimpan beberapa instans alokator blok dan menentukan instans mana yang akan digunakan untuk alokasi atau dealokasi pada runtime alih-alih pada waktu kompilasi. Ini digunakan dengan pengkompilasi yang tidak dapat mengkompilasi pengikatan ulang.

Kebijakan sinkronisasi menentukan bagaimana instans alokator menangani permintaan alokasi dan alokasi serentak dari beberapa utas. Kebijakan paling sederhana adalah meneruskan semua permintaan langsung ke objek cache yang mendasar, meninggalkan manajemen sinkronisasi kepada pengguna. Kebijakan yang lebih kompleks bisa menggunakan mutex untuk membuat serialisasi akses ke objek cache yang mendasar.

Jika kompilator mendukung kompilasi aplikasi berulir tunggal dan multi-utas, filter sinkronisasi default untuk aplikasi utas tunggal adalah sync_none; untuk semua kasus lainnya adalah sync_shared.

Templat cache_freelist cache mengambil argumen kelas maks, yang menentukan jumlah maksimum elemen yang akan disimpan dalam daftar gratis.

<alokator> menyediakan kelas maks berikut:

Makro

Makro Deskripsi
ALLOCATOR_DECL Menghasilkan templat kelas alokator.
CACHE_CHUNKLIST Menghasilkan stdext::allocators::cache_chunklist<sizeof(Type)>.
CACHE_FREELIST Menghasilkan stdext::allocators::cache_freelist<sizeof(Type), max>.
CACHE_SUBALLOC Menghasilkan stdext::allocators::cache_suballoc<sizeof(Type)>.
SYNC_DEFAULT Menghasilkan filter sinkronisasi.

Operators

Operator Deskripsi
operator!= (<alokator>) Pengujian untuk ketidaksetaraan antara objek alokator dari kelas tertentu.
operator== (<alokator>) Pengujian untuk kesetaraan antara objek alokator dari kelas tertentu.

Kelas

Kelas Deskripsi
allocator_base Menentukan kelas dasar dan fungsi umum yang diperlukan untuk membuat alokator yang ditentukan pengguna dari filter sinkronisasi.
allocator_chunklist Menjelaskan objek yang mengelola alokasi penyimpanan dan membebaskan objek menggunakan cache jenis cache_chunklist.
allocator_fixed_size Menjelaskan objek yang mengelola alokasi penyimpanan dan membebaskan objek jenis Type menggunakan cache jenis cache_freelist dengan panjang yang dikelola oleh max_fixed_size.
allocator_newdel Menerapkan alokator yang menggunakan penghapusan operator untuk membatalkan alokasi blok memori dan operator baru untuk mengalokasikan blok memori.
allocator_suballoc Menjelaskan objek yang mengelola alokasi penyimpanan dan membebaskan objek jenis Type menggunakan cache jenis cache_suballoc.
allocator_unbounded Menjelaskan objek yang mengelola alokasi penyimpanan dan membebaskan objek jenis Type menggunakan cache jenis cache_freelist dengan panjang yang dikelola oleh max_unbounded.
allocator_variable_size Menjelaskan objek yang mengelola alokasi penyimpanan dan membebaskan objek jenis Type menggunakan cache jenis cache_freelist dengan panjang yang dikelola oleh max_variable_size.
cache_chunklist Menentukan alokator blok yang mengalokasikan dan membatalkan alokasi blok memori dengan satu ukuran.
cache_freelist Menentukan alokator blok yang mengalokasikan dan membatalkan alokasi blok memori dengan satu ukuran.
cache_suballoc Menentukan alokator blok yang mengalokasikan dan membatalkan alokasi blok memori dengan satu ukuran.
daftar bebas Mengelola daftar blok memori.
max_fixed_size Menjelaskan objek kelas maks yang membatasi objek daftar bebas ke panjang maksimum tetap.
max_none Menjelaskan objek kelas maks yang membatasi objek daftar bebas hingga panjang maksimum nol.
max_unbounded Menjelaskan objek kelas maks yang tidak membatasi panjang maksimum objek daftar bebas.
max_variable_size Menjelaskan objek kelas maks yang membatasi objek daftar bebas dengan panjang maksimum yang kira-kira sebanding dengan jumlah blok memori yang dialokasikan.
rts_alloc Templat kelas rts_alloc menjelaskan filter yang menyimpan array instans cache dan menentukan instans mana yang akan digunakan untuk alokasi dan dealokasi pada runtime alih-alih pada waktu kompilasi.
sync_none Menjelaskan filter sinkronisasi yang tidak menyediakan sinkronisasi.
sync_per_container Menjelaskan filter sinkronisasi yang menyediakan objek cache terpisah untuk setiap objek alokator.
sync_per_thread Menjelaskan filter sinkronisasi yang menyediakan objek cache terpisah untuk setiap utas.
sync_shared Menjelaskan filter sinkronisasi yang menggunakan mutex untuk mengontrol akses ke objek cache yang dibagikan oleh semua alokator.

Persyaratan

Header:<alokator>

Namespace: stdext

Baca juga

Referensi File Header