2010-07-25 68 views
8

我使用列表类在C++中,我不知道是什么意思并不意味着分配器这里什么分配器在STL

template < class T, class Allocator = allocator<T> > class list; 

如果我有list <int> mylist这将意味着使用分配器分配内存整数类型当一个元素被添加到列表中?你什么时候需要自定义分配器?

回答

11

是的。 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 newoperator delete

您希望随时使用您自己的分配器,以便您需要以特殊方式进行分配。这些情况可能是:从某些freelist获取内存,从堆栈中分配等。(通常为了优化目的,尽管您也可以使用自定义分配器来记录统计信息)大多数情况下,标准分配器完美工作。

2

除了GMan指出的之外,自定义分配器可用于对齐内存分配。一些使用SIMD指令集的高性能库需要对齐的内存。这些库可能会为您提供随时可用的分配器,您可以将其插入任何STL容器。还有缓存对齐的分配器可以避免多线程代码中的错误共享。英特尔的TBB带有可扩展的分配器,可以加速多线程内存分配/分配。