memory_unsynchronized_pool_resource
memory_unsynchronized_pool_resource (std::pmr::unsynchronized_pool_resource)
<memory_resource> 헤더에 정의되어 있어요. 범용 메모리 리소스 클래스예요. 할당된 메모리를 소유하고, 일부 할당 블록에 대해 deallocate가 호출되지 않았어도 파괴 시 해제해요. 스레드 안전하지 않아요. C++17부터 도입됐어요.
출처: cppreference
본문
class unsynchronized_pool_resource : public std::pmr::memory_resource;
(C++17부터)
클래스 std::pmr::unsynchronized_pool_resource는 다음 속성을 가진 범용 메모리 리소스 클래스예요.
- 할당된 메모리를 소유하고, 일부 할당 블록에 대해
deallocate가 호출되지 않았어도 파괴 시 해제해요. - 서로 다른 블록 크기의 요청을 처리하는 풀들의 집합으로 구성돼요. 각 풀은 균일한 크기의 블록으로 나뉘는 청크들의 집합을 관리해요.
do_allocate호출은 요청 크기를 수용하는 가장 작은 블록을 제공하는 풀로 전달돼요.- 풀의 메모리가 고갈되면 그 풀의 다음 할당 요청은 업스트림 할당자에서 추가 청크를 할당해 풀을 보충해요. 얻은 청크 크기는 기하급수적으로 증가해요.
- 가장 큰 블록 크기를 초과하는 할당 요청은 업스트림 할당자에서 직접 처리돼요.
- 가장 큰 블록 크기와 최대 청크 크기는 생성자에
std::pmr::pool_options구조체를 전달해 조절할 수 있어요.
unsynchronized_pool_resource는 스레드 안전하지 않아서 여러 스레드가 동시에 접근할 수 없어요. 여러 스레드 접근이 필요하면 synchronized_pool_resource를 사용해요.
멤버 함수
- (생성자):
unsynchronized_pool_resource생성 release: 할당된 모든 메모리를 업스트림에 해제upstream_resource: 업스트림 리소스 포인터 반환options: 풀 옵션 반환
std::pmr::unsynchronized_pool_resource pool;
std::pmr::vector<int> v(&pool); // 단일 스레드에서 pool 사용