我知道我可以使用boost singleton_pool,如下所示:
typedef boost::singleton_pool< OrderTag,sizeof(memSize)>Pool;
这是模板类,memSize必须在编译时知道。但是我只在运行时填充memSize,它的值可能因不同的设置而有所不同。这意味着我根本不能在动态中使用boost :: pool类场景,因为它们都是模板类?
答案 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();
}