正直日記



2008/03/11

_ boost::poolを使ってみる
先日の調整君を改良してみる。
普通にnew/deleteすると、オブジェクト90個を境に処理落ちが始まってた。



boost::poolを使ってみたら、190個までは処理落ちしないようになった。



しかし、速度的に改善してはいるんだけど、operator newともども初めて使うの
で、物凄く不安だ。

static const size_t TASK_SIZE = sizeof(Task) + sizeof(int) * 16;
static boost::pool<boost::default_user_allocator_new_delete>
  task_pool(TASK_SIZE);

static void* 
Task::operator new (size_t const size)
{
  return task_pool.malloc();
}

static void 
Task::operator delete (void *p, size_t size)
{
  memset(p, 0xff, TASK_SIZE);
  task_pool.free(p);
}
こんな簡単な実装で動いちゃっていいの? object_poolではなくpoolを使ってしまうあたりがタスクシステム脳っぽいかも。 ついでにオブジェクトの管理リストにfast_pool_allocatorを使うようにしたら 更に速度が改善した。
  std::list<Task*, boost::fast_pool_allocator<Task*> > tasklist;
各オブジェクトの最大生成数を決めておいて、最初にresize()する方が、よさげ ではあるけど……。 それと、ようやく Right Angle Brackets 問題の深刻さ(としょーもなさ)が分 かったよ。

最新
2010 | 01 04
2009 | 01 02 03 04 05 06 07 09 10 11 12
2008 | 01 02 03 04 05 06 07 08 09 10 11 12
2007 | 02 03 04 05 06 07 08 10 11 12
2006 | 01 02 03 04 05 06 07 08 09 10 11 12
2005 | 01 02 03 04 05 06 07 08 09 10 11 12