synchronized_pool_resource — std::pmr::synchronized_pool_resource
synchronized_pool_resource — std::pmr::synchronized_pool_resource
std::pmr::synchronized_pool_resource는 범용 목적 메모리 자원 클래스로, 다양한 블록 크기의 요청을 처리하는 풀들의 집합으로 동작하며 스레드 안전이 보장돼요. <memory_resource> 헤더에 제공돼요.
여러 스레드가 같은 메모리 자원을 안전하게 공유하면서 풀 할당의 속도를 얻고 싶을 때 사용해요. 내부에서 동기화를 수행하므로 unsynchronized_pool_resource와 달리 멀티스레드에서 안전해요.
출처: cppreference
본문
std::pmr::synchronized_pool_resource는 다음 속성을 가진 범용 목적 메모리 자원 클래스예요.
class synchronized_pool_resource : public std::pmr::memory_resource;
- 할당된 메모리를 소유하며, 일부 블록에
deallocate가 호출되지 않았더라도 파괴 시 해제해요. - 서로 다른 블록 크기의 요청을 처리하는 **풀(pool)**들의 집합으로 구성돼요. 각 풀은 균일한 크기의 블록으로 나뉘는 **청크(chunk)**들의 집합을 관리해요.
do_allocate호출은 요청 크기를 수용하는 가장 작은 블록을 서빙하는 풀로 디스패치돼요.- 풀의 메모리가 소진되면 그 풀에 대한 다음 할당 요청이 업스트림 할당자에서 추가 청크를 할당해 풀을 보충해요. 청크 크기는 기하급수적으로 증가해요.
- 가장 큰 블록 크기를 초과하는 할당 요청은 업스트림 할당자에서 직접 처리돼요.
- 가장 큰 블록 크기와 최대 청크 크기는 생성자에
std::pmr::pool_options구조체를 전달해 조정할 수 있어요.
unsynchronized_pool_resource와 기능은 같지만, 여러 스레드에서 안전하게 사용할 수 있도록 내부 동기화를 제공해요. 단일 스레드 전용 프로그램에서는 unsynchronized_pool_resource가 더 가벼워요.
같이 보기
std::pmr::unsynchronized_pool_resourcestd::pmr::pool_optionsstd::pmr::memory_resource