본문 바로가기

C..C++....

BoostPool 사용하기..

BoostPool의 템플릿 버전입니다..

그냥 상속받아서 new delete 하시면 됨니다..

 
#pragma once
#include <boost/pool/pool.hpp>

template<class T>
class CBoostPool
{
public:
  void* operator new(size_t _size)
  {
    return m_bpool.malloc();
  }
  void operator delete(void* _p)
  {
    m_bpool.free(_p);
  }
protected:
  static boost::pool<> m_bpool;
};
template<class T>
boost::pool<> CBoostPool<T>::m_bpool(sizeof(T));

class CTest : public CBoostPool<CTest>
{
public:
	wchar_t m_szName[64];
};

void main()
{
	CTest* ptr = new CTest;
}


BoostPool도 클래스와 같은 객체에 사용하는 objectPool과
쓰레드에 세이프한 singleton_pool이 있는데.
속도면에서는 pool이 월등 하게 나왔다..
objectPool은 오히려 pool을 사용하지 않았을때보다도 느릴때도 많았고.
singleton_pool 같은경우엔 pool보다는 느리지만 그래도 안쓸때보다는 훨씬 빨랐고
쓰레드에 세이프하다는데 의미를 두자 -_-;