共用方式為


<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

另請參閱

標頭檔參考