boost::pool 메모리 풀

컴퓨터 이야기/C++ 2015.12.09 05:58

일반적으로 new/delete 를 통해서 메모리를 할당하는것은 비용을 발생시키고

보기에 위험해 보입니다.

C/C++ 에선 메모리를 할당 하기 위해서 시스템 콜(OS 내부 함수를 요청)을 해야만 하는데 이는 생각보다 큰 비용을 발생 시킵니다. 그래서 할당을 미리 해놓고 꺼내오고 해제된 메모리를 다시 쓰는 방식으로 재활용을 해야하는데, 라이브러리를 잘 짜기가 힘이 듭니다.

boost 로 해결할 수 있습니다.



#include <iostream>
#include <boost/pool/pool.hpp>
#include <boost/pool/object_pool.hpp>
using namespace std;


struct SomeObject
{
    SomeObject()  { static int no=0; cout << "SomeObject() :" << (m_no=++no) << endl; }
    ~SomeObject() { cout << "~SomeObject():" << m_no << endl; }
    int m_no;
};

int main()
{
    {
        // sizeof(int) 바이트 사용
        boost::pool<> p( sizeof(int) );
        int* x = (int*)p.malloc();
        int* y = (int*)p.malloc();
        int* z = (int*)p.malloc();
        *x = 10;
        p.free(z); // 명시적 free

        // free 명시적안해도 알아서 해제됨
    }

    {
        // SomeObject 객체
        boost::object_pool<SomeObject> p;
        SomeObject* x = p.construct();
        SomeObject* y = p.construct();
        SomeObject* z = p.construct();
        p.destroy(y);// 명시적 해제

        // destroy 명시적으로 해제 안해도 알아서 됨.
    }

    return 0;
}


'컴퓨터 이야기 > C++' 카테고리의 다른 글

JNI 정리.  (0) 2016.05.30
Circular Queue 배열 구현 클래스  (0) 2015.12.09
boost::pool 메모리 풀  (0) 2015.12.09
C++ Standard draft 07  (0) 2011.02.05
나머지 연산자의 동작.  (2) 2011.01.13
strlen 따라잡기 in KLDP.ORG  (0) 2011.01.13
tags : , , ,
Trackback 0 : Comment 0