STL 컬렉션은 템플릿 지정자를 이용하여 메모리 할당자를 설정할 수 있습니다. 참고로 메모리 할당자란 컬렉션에 요소에 대해서 메모리 new / delete하는 객체를 말합니다. STL 컬렉션에 메모리 할당자를 메모리풀을 사용하도록 하여 성능을 향상 시킬 수 있습니다.
boost에는 이 STL 컬렉션 관련 메모리 풀 지원 할당자가 pool_allocator와 fast_pool_allocator이 있습니다. 두 할당자 모두 어느 STL 컬렉션에나 사용할 수 있습니다.
특징적으로 pool_allocator는 vector처럼 연속된 메모리 할당 및 해제가 일어나는 STL 컬렉션에서 성능이 좋습니다. fast_pool_allocator는 list처럼 단일 메모리 할당 및 해제가 일어나는 STL 컬렉션에서 성능이 좋습니다.
이 외의 설명은 아래 예제를 살펴본 후에 하겠습니다.
#define BOOST_POOL_NO_MT
#include <boost/pool/pool_alloc.hpp>
#include <vector>
#include <list>
using namespace std;
int main(int argc, char* argv[])
{
typedef boost::pool_allocator<int> allocator;
typedef boost::fast_pool_allocator<int> fast_allocator;
typedef boost::pool_allocator<int,
boost::default_user_allocator_new_delete,
boost::details::pool::default_mutex,
64, 128> allocator2;
typedef boost::fast_pool_allocator<int,
boost::default_user_allocator_new_delete,
boost::details::pool::default_mutex,
64, 128> fast_allocator2;
std::vector<int, allocator> test_vector;
std::list<int, fast_allocator> test_list;
boost::singleton_pool<boost::pool_allocator_tag, sizeof(int)>::purge_memory();
boost::singleton_pool<boost::fast_pool_allocator_tag, sizeof(int)>::purge_memory();
return 0;
}
예제에서 #define BOOST_POOL_NO_MT는 boost의 pool 관련 부분이 멀티쓰레드가 아닌 싱글쓰레드를 사용하겠다는 #define입니다. 해당 #define을 사용하여 싱글쓰레드 프로그램에서 성능을 높일 수 있습니다. allocator2와 fast_allocator2는 복잡한 템플릿 인자 버전을 보여주어 설정할 수 있는 것들을 보여주려고 했습니다. 해당 메모리 할당자를 다 사용한 후에는, 아마도 프로그램 종료시에, 프로그램의 끝에서 purge_memory()를 해주어 메모리를 정리하여야 합니다. 이때 템플릿 인자로 allocator관련하여 _tag를 붙인 인자를 넘겨준다는 것에 주의하여야 합니다.
'강좌' 카테고리의 다른 글
C++ 코루틴(coroutine) 활용 강좌: #2 : co_await (0) | 2022.05.20 |
---|---|
C++ 코루틴(coroutine) 활용 강좌: #1 시작하며 그리고 기본 개념 (0) | 2022.05.19 |
C++ REST API 사용 강좌 : #2 HTTP POST (boost beast 활용) (2) | 2022.05.12 |
C++ REST API 사용 강좌 : #1 HTTP GET (boost beast 활용) (0) | 2022.05.11 |
C++ boost 메모리풀 강좌 #4: object_pool 클래스를 이용하여 new 재정의 없이 일반 클래스에 메모리풀 적용하기 (0) | 2021.11.14 |
C++ boost 메모리풀 강좌 #3: singleton_pool 클래스를 이용하여 일반 클래스에 메모리풀 적용하기 (0) | 2021.11.13 |
C++ boost 메모리풀 강좌 #2: pool 클래스를 이용하여 버퍼에 메모리풀 적용하기 (0) | 2021.11.12 |
C++ boost 메모리풀 강좌 #1: 메모리풀의 개념 (0) | 2021.11.11 |