我正在尝试将boost::singleton_pool用于内存池。我需要它来解决以下问题:
在我的应用程序中,我偶尔为固定字节数的对象分配内存。然后在某些时候我解除了那些(也偶尔一个一个)。在内存中总是最多N
(在编译时设置)已分配对象的数量。每当其中一个结束其生命周期时,它就会被解除分配。所以我的问题是,如果提到的对象名称是demo_block
,我应该将RequestedSize
指定为N * 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;
答案 0 :(得分:1)
您应该指定这样的大小:
struct MyOrderTag{};
typedef boost::singleton_pool<MyOrderTag,sizeof(demo_block)> MyMemPool;
您可以查看singleton_pool正在使用的池interface。创建池时,它将接收要分配的大小。这就是为什么池接口的不同malloc函数在参数中不占用大小的原因,它在池创建时是固定的。