我使用列表類在C++中,我不知道是什麼意思並不意味着分配器這裏什麼分配器在STL
template < class T, class Allocator = allocator<T> > class list;
如果我有list <int> mylist
這將意味着使用分配器分配內存整數類型當一個元素被添加到列表中?你什麼時候需要自定義分配器?
我使用列表類在C++中,我不知道是什麼意思並不意味着分配器這裏什麼分配器在STL
template < class T, class Allocator = allocator<T> > class list;
如果我有list <int> mylist
這將意味着使用分配器分配內存整數類型當一個元素被添加到列表中?你什麼時候需要自定義分配器?
是的。 allocator
是從內存使用中分配內存的一種方法。如果容器需要一些存儲來代替,:
// too rigid, cannot allow custom allocation schemes
void* mem = ::operator new(someAmount);
你得到:
// flexible, allows custom allocation schemes
void* mem = myallocator.allocate(someAmount);
有一個標準分配器,std::allocator
,它採用全球operator new
和operator delete
。
您希望隨時使用您自己的分配器,以便您需要以特殊方式進行分配。這些情況可能是:從某些freelist獲取內存,從堆棧中分配等。(通常爲了優化目的,儘管您也可以使用自定義分配器來記錄統計信息)大多數情況下,標準分配器完美工作。
除了GMan指出的之外,自定義分配器可用於對齊內存分配。一些使用SIMD指令集的高性能庫需要對齊的內存。這些庫可能會爲您提供隨時可用的分配器,您可以將其插入任何STL容器。還有緩存對齊的分配器可以避免多線程代碼中的錯誤共享。英特爾的TBB帶有可擴展的分配器,可以加速多線程內存分配/分配。