我知道我可以按如下方式使用升压singleton_pool:动态参数提升内存池
typedef boost::singleton_pool< OrderTag,sizeof(memSize)>Pool;
这是模板类和MEMSIZE必须在编译时间。但只在运行时,它的值是已知的,我得到MEMSIZE填充可能会因不同的设置而有所不同。这是否意味着我无法在动态场景中使用boost :: pool类,因为它们都是模板类?
我知道我可以按如下方式使用升压singleton_pool:动态参数提升内存池
typedef boost::singleton_pool< OrderTag,sizeof(memSize)>Pool;
这是模板类和MEMSIZE必须在编译时间。但只在运行时,它的值是已知的,我得到MEMSIZE填充可能会因不同的设置而有所不同。这是否意味着我无法在动态场景中使用boost :: pool类,因为它们都是模板类?
您可以使用boost::pool接口和它的构造函数初始化大小:
void func()
{
std::size_t memSize = getMemSize();
boost::pool<> p(memSize);
char* ptr = p.malloc();
}
或者使用的boost::singleton_pool接口大小为1,然后分配多个块(你一定要BEFORE资料这个解决方案执行它):
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();
}
我希望Boost能以这种方式记录它们的接口:) –
boost :: pool线程安全吗? –
的单路不干活的意思是它的工作原理,但需要永恒运行的allocations.Doing像这样一个循环:\t demo_block * OBJ =(demo_block *)MyMemPool :: ordered_malloc(的sizeof(demo_block)); \t \t obj-> alpha = 100; \t \t obj-> beta = 200; \t \t obj-> gama = 300; \t \t MyMemPool :: ordered_free(obj); –
如果您正在存储一个对象池,它是该对象的大小。如果你正在存储一个指针池,那么它就是指针的大小。 – thecoshman
嗯,不,它是作为参数传入应用程序的字节块的大小,可能会有所不同... –
什么?我无法理解你所说的话。请提供一个SSCE – thecoshman