<allocators>
定義數個範本,協助配置和釋放節點容器的記憶體區塊。
Syntax
#include <allocators>
注意
<配置器> 從 Visual Studio 2019 16.3 版開始已被取代。
備註
<配置器>標頭提供六個配置器範本,可用來選取節點型容器的記憶體管理策略。 若與這些範本搭配使用,也可以提供數個不同的同步處理篩選,以將記憶體管理策略調整為數種不同的多執行緒配置 (包括無)。 您可以將記憶體管理策略與記憶體使用模式和同步處理需求比對,以加快應用程式的速度,或減少其記憶體需求。
使用可自訂或取代的可重複使用元件來實作配置器範本,以提供額外的記憶體管理策略。
C++標準連結庫中的節點型容器(std::list、std::set、std::multiset、std::map 和 std::multimap) 中的元素會儲存在個別節點中。 特定容器類型的所有節點的大小都相同,因此不需要一般用途記憶體管理員的彈性。 因為在編譯時期就知道每個記憶體區塊的大小,所以記憶體管理員就會更簡單且快速。
與不是節點為基礎的容器搭配使用時(例如C++標準連結庫容器 std::vector std::d eque 和 std::basic_string),配置器範本會正常運作,但不太可能提供默認配置器的任何效能改進。
配置器是類別範本,描述物件,該物件會管理指定型別之對象的儲存配置和釋放物件和陣列。 配置器物件會由C++標準連結庫中的數個容器類別範本使用。
配置器是此類型的所有範本︰
template<class Type>
class allocator;
其中,範本引數 Type
是配置器執行個體所管理的類型。 C++標準連結庫會提供預設配置器類別範本配置器,其定義於記憶體>中<。 <設定器>標頭提供下列設定器:
建立容器時,使用配置器的適當具現化作為第二個類型引數,例如下列程式碼範例。
#include <list>
#include <allocators>
std::list<int, stdext::allocators::allocator_chunklist<int> > _List0;
_List0 會配置具有 allocator_chunklist
的節點以及預設同步處理篩選。
使用 ALLOCATOR_DECL 巨集,以使用預設值以外的同步處理篩選來建立配置器範本:
#include <list>
#include <allocators>
ALLOCATOR_DECL(CACHE_CHUNKLIST, stdext::allocators::sync_per_thread, Alloc);
std::list<int, alloc<int> > _List1;
_Lst1 會配置具有 allocator_chunklist
的節點以及 sync_per_thread同步處理篩選。
區塊配置器是快取或篩選。 快取是類別範本,採用 std::size_t 類型的一個自變數。 它會定義區塊配置器,以配置和解除配置單一大小的記憶體區塊。 它必須取得記憶體 using 運算子 new
,但不需要個別呼叫每個區塊的運算子 new
。 例如,它會從較大的區塊進行子配置,或快取已解除配置的區塊以進行後續重新配置。
編譯程式無法重新系結具現化範本時所使用的 std::size_t 自變數值,不一定是傳遞至快取成員函式配置和解除分配之自 _Sz變數的值。
<設定器> 提供下列快取範本:
篩選條件是使用另一個區塊配置器來實作其成員函式的區塊配置器,該配置器會以樣板自變數的形式傳遞給它。 最常見的篩選形式是同步處理篩選,其套用同步處理原則來控制對另一個區塊配置器執行個體之成員函式的存取。 <設定器> 提供下列同步處理篩選器:
<配置器>也會提供篩選rts_alloc,此篩選rts_alloc會保存多個區塊配置器實例,並決定要在運行時間用於配置或解除分配的實例,而不是在編譯時期使用。 它會搭配不可編譯重新繫結的編譯器使用。
同步處理原則決定配置器執行個體如何同時處理多個執行緒的配置和解除配置要求。 最簡單的原則是將所有要求直接傳遞給基礎快取物件,讓使用者同步處理管理。 更複雜的原則可以使用 Mutex 來序列化對基礎快取物件的存取。
如果編譯器支援編譯單一執行緒和多執行緒應用程式,則單一執行緒應用程式的同步處理篩選是 sync_none
;在所有其他情況下,則是 sync_shared
。
快取範本 cache_freelist
會採用 max 類別自變數,以決定要儲存在免費清單中的最大項目數目。
<設定器> 提供下列最大類別:
巨集
Macro | 描述 |
---|---|
ALLOCATOR_DECL | 產生配置器類別範本。 |
CACHE_CHUNKLIST | 產生 stdext::allocators::cache_chunklist<sizeof(Type)> 。 |
CACHE_FREELIST | 產生 stdext::allocators::cache_freelist<sizeof(Type), max> 。 |
CACHE_SUBALLOC | 產生 stdext::allocators::cache_suballoc<sizeof(Type)> 。 |
SYNC_DEFAULT | 產生同步處理篩選。 |
操作員
運算子 | 描述 |
---|---|
operator!= (<配置器>) | 測試指定類別的配置器物件之間是否不等。 |
operator== (<配置器)> | 測試指定類別的配置器物件之間是否相等。 |
類別
類別 | 描述 |
---|---|
allocator_base | 定義從同步處理篩選條件建立使用者定義的配置器時所需的基底類別和一般功能。 |
allocator_chunklist | 描述物件,該物件使用 cache_chunklist 類型的快取來管理物件的儲存空間配置和釋放。 |
allocator_fixed_size | 描述物件,該物件搭配使用 cache_freelist 類型的快取與 max_fixed_size 所管理的長度,來管理 Type 類型之物件的儲存空間配置和釋放。 |
allocator_newdel | 實作配置器,該配置器會使用 運算子 delete 來解除分配記憶體區塊,以及 配置記憶體區塊的 new 運算子。 |
allocator_suballoc | 描述物件,該物件使用 cache_suballoc 類型的快取來管理 Type 類型之物件的儲存空間配置和釋放。 |
allocator_unbounded | 描述物件,該物件搭配使用 cache_freelist 類型的快取與 max_unbounded 所管理的長度,來管理 Type 類型之物件的儲存空間配置和釋放。 |
allocator_variable_size | 描述物件,該物件搭配使用 cache_freelist 類型的快取與 max_variable_size 所管理的長度,來管理 Type 類型之物件的儲存空間配置和釋放。 |
cache_chunklist | 定義區塊配置器,以配置和解除配置單一大小的記憶體區塊。 |
cache_freelist | 定義區塊配置器,以配置和解除配置單一大小的記憶體區塊。 |
cache_suballoc | 定義區塊配置器,以配置和解除配置單一大小的記憶體區塊。 |
freelist | 管理記憶體區塊的清單。 |
max_fixed_size | 描述 max 類別物件,其可將 freelist 物件限制為固定最大長度。 |
max_none | 描述 max 類別物件,其可將 freelist 物件限制為零 (最大長度)。 |
max_unbounded | 描述 max 類別物件,其不會限制 freelist 物件的最大長度。 |
max_variable_size | 描述 max 類別物件,其可將 freelist 物件限制為與已配置記憶體區塊數目成正比的最大長度。 |
rts_alloc | rts_alloc類別範本描述 保留快取實例陣列的篩選 ,並決定要在運行時間用於配置和解除分配的實例,而不是在編譯時期使用。 |
sync_none | 描述未提供任何同步處理的同步處理篩選。 |
sync_per_container | 描述可為每個配置器物件提供不同快取物件的同步處理篩選。 |
sync_per_thread | 描述可為每個執行緒提供不同快取物件的同步處理篩選。 |
sync_shared | 描述同步處理篩選,使用 Mutex 來控制對所有配置器共用之快取物件的存取。 |
需求
Header:<allocators>
命名空間: stdext