Thinking Different




boost::pool

일반적 풀 인터페이스


boost::malloc()

새로운 메모리 할당


boost::pool::free

명시적으로 메모리 할당 해제 (이 처리를 하지 않아도 자동으로 free됨)


1
2
3
4
5
6
7
8
9
10
11
12
// pool
    {
        // sizeof(int) 바이트 전용 할당자
        boost::pool<> p(sizeof(int));
 
        // 풀 할당
        int* a = (int*)p.malloc();
        *a = 10;
 
        // 명시적으로 메모리 해제
        p.free(a);
    }






boost::object_pool

오브젝트(객체) 풀 인터페이스


boost::construct()

새로운 메모리 할당


boost::object_pool::destroy()

명시적으로 소멸자 호출 (이 처리를 하지 않아도 자동으로 소멸자 호출)


1
2
3
4
5
6
7
8
9
10
11
12
// object_pool
    {
        boost::object_pool<object> op;
 
        // 풀에서 객체 할당
        object* o1 = op.construct("test1");
        object* o2 = op.construct("test2");
 
        // 명시적으로 해제
        op.destroy(o1);
    //    op.destroy(o2);
    }





boost::singleton_pool

정적 기반 thread safe singleton 풀 인터페이스


boost::singleton_pool::malloc()

새로운 메모리 할당


boost::singleton_pool::::free

명시적으로 메모리 할당 해제


boost::singleton_pool::release_memory()

boost::singleton_pool::purge_memory()

할당받은 모든 메모리들 해제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
// singleton_pool
    {
        typedef boost::singleton_pool<object, sizeof(object)> sp;
 
        // 풀에서 할당
        object *so1 = (object*)sp::malloc();
 
        // 명시적으로 해제
        sp::free(so1);
 
        // 모든 할당 메모리 해제
        sp::release_memory();
        sp::purge_memory();
    }





boost::pool_alloc

singleton_pool을 기반으로 작성된 편리한 할당자


boost::singleton_pool::release_memory()

boost::singleton_pool::purge_memory()

할당받은 모든 메모리들 해제 (자동으로 해제하지 않음으로 반드시 필요)



1
2
3
4
5
6
7
8
9
10
11
12
13
// pool_alloc
    {
        // vector 컨테이너에서 할당자 클래스 사용
        std::vector<int, boost::pool_allocator<object*>> v;
        for (int i = 0; i < 1000; ++i)
            v.push_back(i);
 
        v.clear();
 
        // 모든 할당 메모리 해제
        boost::singleton_pool<boost::pool_allocator_tag, sizeof(int)>::release_memory();
        boost::singleton_pool<boost::pool_allocator_tag, sizeof(int)>::purge_memory();
    }


'프로그래밍 언어 > boost' 카테고리의 다른 글

Boost.Atomic  (0) 2015.04.30
Boost.ScopeExit  (0) 2015.04.28
Boost.Thread  (0) 2015.04.28
shared_ptr 성능 이슈 및 테스트  (0) 2014.04.02
Boost.Lexical_cast  (0) 2014.04.02