memory_monotonic_buffer_resource
memory_monotonic_buffer_resource (std::pmr::monotonic_buffer_resource)
<memory_resource> 헤더에 정의되어 있어요. 리소스가 파괴될 때만 할당된 메모리를 해제하는 특수 목적 메모리 리소스 클래스예요. 적은 객체를 만들고 한꺼번에 해제하는 매우 빠른 할당을 위한 것이에요. C++17부터 도입됐어요.
출처: cppreference
본문
class monotonic_buffer_resource : public std::pmr::memory_resource;
(C++17부터)
클래스 std::pmr::monotonic_buffer_resource는 리소스가 파괴될 때만 할당된 메모리를 해제하는 특수 목적 메모리 리소스 클래스예요. 몇 개의 객체를 만드는 데 메모리를 쓰고 나서 전부 한 번에 해제하는 상황에서 매우 빠른 메모리 할당을 의도해요.
monotonic_buffer_resource는 초기 버퍼로 구성할 수 있어요. 초기 버퍼가 없거나 버퍼가 고갈되면, 구성 시 제공된 업스트림 메모리 리소스에서 추가 버퍼를 얻어요. 얻는 버퍼의 크기는 기하급수적으로 증가하는 성장 정책을 따를 수 있어요.
생성자
explicit monotonic_buffer_resource( std::pmr::memory_resource* upstream ); // (1) since C++17
explicit monotonic_buffer_resource( std::size_t initial_size,
std::pmr::memory_resource* upstream ); // (2) since C++17
monotonic_buffer_resource( monotonic_buffer_resource* other,
std::pmr::memory_resource* upstream ); // (3) since C++17
explicit monotonic_buffer_resource( std::size_t initial_size ); // (4) since C++17
monotonic_buffer_resource() noexcept; // (5) since C++17
-
upstream을 업스트림으로 사용하는 리소스.upstream이 널이면 기본 리소스(get_default_resource)를 사용해요.
-
initial_size초기 버퍼 크기로 구성.
-
other의 초기 크기를 사용하고upstream으로 버퍼를 얻는 리소스.
-
initial_size로 구성하고 기본 업스트림 사용.
-
- 기본 크기와 기본 업스트림 사용.
멤버 함수
release(C++17): 할당된 모든 메모리를 업스트림에 해제하도록 공개 호출 (파괴 시에도 호출됨)upstream_resource: 업스트림 리소스 포인터 반환options(C++17): 성장 정책·청크 크기 옵션 반환
monotonic_buffer_resource는 포인터를 해제하지 않는 특성을 가져서 단일 스레드 벤치마크처럼 수명이 짧고 빠른 할당이 필요할 때 유용해요. 파괴되거나 release()가 호출될 때 모든 메모리를 한 번에 해제해요.
std::pmr::monotonic_buffer_resource pool;
std::pmr::vector<int> v(&pool); // pool 에서 할당
// ... v 사용 ...
// pool 파괴 시 모든 메모리 한번에 해제