我知道我可以按如下方式使用升壓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