c++ - 使用动态参数 boost 内存池

标签 c++ memory boost

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

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

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

最佳答案

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

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

  char* ptr = p.malloc();
}

或者使用boost::singleton_pool大小为 1 的接口(interface),然后分配多个 block (在实现之前你一定要分析这个解决方案):

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();
}

关于c++ - 使用动态参数 boost 内存池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21090378/

相关文章:

c++ - 在 C++ 中,如何返回采用纯虚拟(const ref)参数的对象?

c++ - 不同容器的包装器 contains() 函数

c++ - 将 boost IOStreams 与 std::ostream_iterator 结合使用

c++ - 如何使用 Boost.Interprocess 将数据流式传输到其他应用程序?

memory - 如何在 spartan 3e fpga 中流式传输小视频?

c++ - 在函数定义中使用 enable_if 进行模板特化

c++ - 无法计算 C++ 中的总数

c++ - 根据按键修改相机位置

java - 观察递归期间创建的内部堆栈上的值

c++ - 基于构造函数的可访问性在函数之间进行选择的模板方法