我想为allocator
指定std::map
。所以编写自定义的一个,从Josuttis的here获取基本代码。我想使用boost::object_pool
来获得高性能。但是boost::object_pool
不提供API来分配接口函数
n
个连续元素
pointer allocate (size_type num, const void* = 0)
allocator
的。
如何在boost::objet_pool
中分配n个连续元素?任何其他开源对象池都提供相同的功能。
我看到boost::simple_segregated_storage
有界面
void * malloc_n(size_type n, size_type partition_sz);
但是
void free_n(void * chunks, size_type n,size_type partition_sz);
需要分配元素的大小,我认为不能轻易用作对象池。
答案 0 :(得分:0)
以下回答是使用boost::object_pool
为allocator
实施自定义std::map
的纯粹黑客攻击。需要在平台上测试解决方案(特定版本的OS,编译器,boost和c ++ std lib组合)。
似乎std::map
永远不会为多个元素请求连续内存,因此您可以实现alloctor的API pointer allocate (size_type num, const void* = 0)
来仅分配单个元素,即{{1}对因为key-value
总是为1。
我检查了插入多个元素的情况,复制地图的构造函数,将多个元素插入到地图中,只需调用num
使用map::insert
和begin iterator
传递元素的范围另一张地图。
在RHEL7上测试,增强1.57.0,gcc版本4.8.2 20140120(红帽4.8.2-16)