강좌

C++ boost 메모리풀 강좌 #1: 메모리풀의 개념

하늘흐늘 2021. 11. 11. 12:47
반응형

메모리 풀은 미리 메모리를 할당하여 놓은 뒤 필요에 따라 할당 및 해제하여 사용하는 기법을 의미합니다.

메모리 풀은 아래와 같은 이점이 있습니다.
첫번째로 할당과 해제에 따른 성능의 향상이 있습니다. 이유는 메모리 할당과 해제 관련 함수는 실제적으로 OS로 부터 메모리를 가져오거나 할당과 해제 관련 메모리 관리처리를 하기 때문에 상대적으로 적은 양이지만 오버헤드가 있기 때문입니다.
두번째로 메모리 단편화가 줄어듭니다. 이유는 미리 상대적으로 큰 메모리를 할당한 뒤 사용하기 때문에 상대적으로 작은 메모리의 할당과 해제에 따른 메모리 단편화가 발생할 가능성이 줄어들기 때문입니다.
 
메모리 풀은 다음과 같은 단점이 있습니다.
첫번째로 메모리 사용 효율성이 떨어질 수 있습니다. 이유는 미리 상대적으로 큰 메모리를 할당하여 사용하기 때문에 사용하지 않는 부분이 미사용 메모리로 남기 때문입니다. 물론 최근 하드웨어의 메모리 크기가 커진 관계로 심하게 큰 메모리를 미리 할당 하지 않는 이상 크게 신경쓸 정도는 아닙니다. 
두번째로 메모리풀 관련 처리 코드가 추가되어야 합니다. 
 
이 시리즈에서는 메모리풀 라이브러리인 boost.Pool을 설명하도록 하겠습니다.
실제적으로 메모리풀을 직접 구현하는 것이 크게 어렵거나 오래 걸리는 일은 아니지만 boost.Pool을 이용하는 이유는 아래와 같습니다.
첫번째로 boost 라이브러리는 코드의 버그 관련하여 검증되고 유명 오픈 소스인 관계로 버그 수정이 빠르기 때문입니다. 
두번째로 최신 C++, 32bit/64bit, 멀티OS 호환이 유지됩니다.
마지막으로 사용 인터페이스가 Modern C++ 기반으로 간결합니다.

성능에 대한 내용은 오래전 내용이긴 하지만 오픈소스 Memory pool 성능 비교을 참조 바랍니다. 오래된 자료지만 기본 할당자와의 차이를 비교하기에 좋습니다. 

반응형