2014-01-12 25 views
0

我正在嘗試使用boost::singleton_pool進行內存池。我需要它來解決以下問題:增強池單身RequestedSize設置

在我的應用程序中,我偶爾爲固定數量的字節對象分配內存。然後在某個時候我釋放這些(偶爾也會一個接一個)。內存中最多隻有N(在編譯時設置)分配的對象數。每當其中一個結束它的生命週期時,它就會被釋放。所以我的問題是,鑑於提到的對象名稱是demo_block,我應該指定RequestedSizeN * sizeof(demo_block)?就像這樣:

struct MyOrderTag{}; 
typedef boost::singleton_pool<MyOrderTag,sizeof(demo_block) * MaxObjects> MyMemPool; 

或者只是單個對象的大小?

struct MyOrderTag{}; 
typedef boost::singleton_pool<MyOrderTag,sizeof(demo_block)> MyMemPool; 

回答

1

你應該像這樣指定大小:

struct MyOrderTag{}; 
typedef boost::singleton_pool<MyOrderTag,sizeof(demo_block)> MyMemPool; 

你可以看看在泳池interface這singleton_pool使用。在創建池時,會收到要分配的大小。這就是爲什麼Pool接口的不同malloc函數在參數中不佔用大小的原因,它在創建池時是固定的。

+0

因此,這意味着池將分配儘可能多的空間來容納所有分配的對象的內存?如何限制該大小? –

+0

您可以爲類指定一個分配器。默認情況下,使用默認的新建和刪除,但可以編寫一個限制分配給您的定義值的數量。 –