#include <stdio.h>
#include <iostream>
#include <vector>
#include <boost/pool/singleton_pool.hpp>
#include <boost/pool/pool_alloc.hpp>


template<typename T,  unsigned int NEXT_SIZE = 32U, unsigned int  MAX_POOL_SIZE = 0U>
class CMemoryPoolT
{
public:
     static void* operator new(size_t size)
     {
          return boost::singleton_pool<T,
               sizeof(T),
               boost::default_user_allocator_new_delete,
               boost::details::pool::default_mutex,
               NEXT_SIZE,
               MAX_POOL_SIZE>::malloc();
     }

     static void operator delete(void* p)
     {
          boost::singleton_pool<T,
               sizeof(T),
               boost::default_user_allocator_new_delete,
               boost::details::pool::default_mutex,
               NEXT_SIZE,
               MAX_POOL_SIZE>::free(p);
     }
};


class CMemoryPoolTest  :public CMemoryPoolT<CMemoryPoolTest>
{
public:
     char Dumy[124] ;
};


int _tmain(int argc, _TCHAR* argv[])
{
     using std::vector ;

     CMemoryPoolTest *p = new CMemoryPoolTest() ;

     delete p ;

     printf("Using MemoryPool... \n") ;


     return 0;
}


위와 같이 작성을 하면 아주 편하게 사용할수 있다

 

메모리 풀을 적용하고 싶은 클래스에 CMemoryPoolT을 상속해주고  

템플릿 명시를 자기 클래스 이름으로 적어 놓는다.

 

명시를 하는 이유는 A라는 클래스가 있고 B라는 클래스 있다고 치면 A라는 클래스와 B라는 클래스를 다른 클래스이므로 메모리를 관리 할때 따로 관리 하는게 편하다.

 

따로 관리를 하기위해 태그를 붙이는 거라 생각을 하면 쉽다.

+ Recent posts