[boost 内存池] 感觉没有实际用处!?请高手指教

猞猁狲 2009-03-02 09:28:39
我要实现如下的内存分配,如何实现,请高手指教

struct X { ... };

void func()
{
X* pX = new X[10];
}

我在网上找了很多资料,大多都是国内同僚没疯狂转载的相同内容,最多的就是那4个中内存池的使用例子,这四个例子看看语法还可以,一点实际意义都没有!

我自己也试了很多方法,从 boost::pool boost::object_pool singleton_pool 都试过!
什么 malloc_n ordered_malloc 这些成员方法都试过,都不行!

boost::object_pool<X> myObj_pool;

void func()
{
X* pX = NULL;
pX = myObj_pool.malloc_n(10,sizeof(X)); // 编译不过去 错误
pX = myObj_pool.ordered_malloc(10); // 编译不过去 错误

}

希望高手指教一下,如果实现我的内存分配要求
...全文
778 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
猞猁狲 2009-03-03
  • 打赏
  • 举报
回复
多谢各位,问题已经解决,例子的用法是对的!这里说明一下,大家以后可以这样用


struct X { int num }; // has destructor with side-effects

void func()
{
boost::object_pool<X> p;
^

X * t;
for (int i = 0; i < 10000; ++i)
{
t = p.malloc();
...
}
}


现在 t 是指向一个结构体数组的指针,这个结构体数组有10000个元素,可以这样用 t[0].num = 0; t[1].num = 2;.....
sanguomi 2009-03-02
  • 打赏
  • 举报
回复
帮up
lightnut 2009-03-02
  • 打赏
  • 举报
回复


void func()
{
typedef boost::singleton_pool<X, 10*sizeof(X)> X10_pool;

X* pX = static_cast<X*> (X10_pool::malloc());
}

  • 打赏
  • 举报
回复
帮up
xuhb95083023 2009-03-02
  • 打赏
  • 举报
回复
大范围的小对象分配,可以参考sgi stl的allocator实现,楼主你把侯捷的stl源码剖析中的allovator部分看看,肯定能解决你的问题。
tangshuiling 2009-03-02
  • 打赏
  • 举报
回复

如果有特定的需求,楼主为何不自己实现内存池,重载new[]操作符 static void * operator new[](size_t t);
实现自己的要求!

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧