在处理小对象时,可以使用哪些分配器与STL一起使用。我已经尝试过使用Boost的池分配器,但没有提高性能(实际上,在某些情况下会有相当大的降级)。
答案 0 :(得分:3)
您没有说明您使用的编译器,但它可能附带了一堆预先构建的分配器。这是在Mac上gcc 4.2.1:
~$ find /usr/include/c++/4.2.1/ -name "*allocator*" /usr/include/c++/4.2.1/bits/allocator.h /usr/include/c++/4.2.1/ext/array_allocator.h /usr/include/c++/4.2.1/ext/bitmap_allocator.h /usr/include/c++/4.2.1/ext/debug_allocator.h /usr/include/c++/4.2.1/ext/malloc_allocator.h /usr/include/c++/4.2.1/ext/mt_allocator.h /usr/include/c++/4.2.1/ext/new_allocator.h /usr/include/c++/4.2.1/ext/pool_allocator.h /usr/include/c++/4.2.1/ext/throw_allocator.h
这里还有一个指向BitMagic项目页面的链接,该页面讨论了如何构建自己的项目。另请查看Loki library(以及book)中的小对象分配器。
答案 1 :(得分:1)
Microsoft Visual C ++标准库实现为基于节点的容器提供several proprietary allocators(至少在即将发布的Visual Studio 2010中)。
答案 2 :(得分:1)
您需要一个适合您特定需求的分配器。 STL通用分配器最适合各种情况,如果您需要新的分配器,则需要分析并了解您的特定要求。您必须更具体地说明要将这些对象放入哪个容器中。