使用动态参数增强内存池

时间:2014-01-13 11:40:05

标签: c++ memory boost

我知道我可以使用boost singleton_pool,如下所示:

 typedef boost::singleton_pool< OrderTag,sizeof(memSize)>Pool;

这是模板类,memSize必须在编译时知道。但是我只在运行时填充memSize,它的值可能因不同的设置而有所不同。这意味着我根本不能在动态中使用boost :: pool类场景,因为它们都是模板类?

1 个答案:

答案 0 :(得分:1)

您可以使用boost::pool接口并在其构造函数上初始化大小:

void func()
{
  std::size_t memSize = getMemSize(); 
  boost::pool<> p(memSize);

  char* ptr = p.malloc();
}

或者使用大小为1的boost::singleton_pool接口,然后分配多个块(在实现之前,您一定要对此解决方案进行分析):

typedef boost::singleton_pool<MyPoolTag, sizeof(char)> my_pool;
void func()
{
  std::size_t memSize = getMemSize(); 

  char * ptr = my_pool.ordered_malloc(memSize);

  my_pool::purge_memory();
}