polymorphic — 폴리모픽 메모리 자원

polymorphic — 폴리모픽 메모리 자원 (Polymorphic memory resources)

이 페이지는 C++17의 폴리모픽 메모리 자원 표준 개요를 다뤄요. <memory_resource> 헤더에 제공돼요.

std::pmr 네임스페이스는 메모리 할당 전략을 런타임에 다형적으로 선택할 수 있게 하는 메모리 자원 추상화를 제공해요. 이를 통해 컨테이너가 실행 중에 다른 할당 방식을 쓸 수 있어요.

출처: cppreference

본문

폴리모픽 메모리 자원(PMR)은 다음 구성 요소로 이루어져요.

  • std::pmr::memory_resource — 메모리 할당·해제의 추상 기반 클래스
  • std::pmr::polymorphic_allocatormemory_resource에 연결된 할당자
  • 표준 자원 구현new_delete_resource, null_memory_resource, monotonic_buffer_resource, synchronized_pool_resource, unsynchronized_pool_resource
  • 설정pool_options, pool_resource
  • 유틸리티get_default_resource, set_default_resource, new_delete_resource

핵심 아이디어는, std::vector<T, Alloc>처럼 할당자를 템플릿 인자로 받는 컨테이너에서 Allocstd::pmr::polymorphic_allocator<T>로 지정하면, 실제 메모리 제공자는 런타임에 memory_resource 포인터로 바꿀 수 있다는 거예요.

std::pmr::vector<int> v; // 기본 자원 사용
std::pmr::monotonic_buffer_resource buf;
std::pmr::vector<int> v2(&buf); // 버퍼 자원 사용

이렇게 하면 실행 중에 메모리 전략을 스위칭할 수 있고, 게임·서버 같은 성능 민감 애플리케이션에서 메모리 풀링이나 단조 버퍼 할당을 쉽게 적용할 수 있어요.

폴리모픽 할당자 (polymorphic_allocator)

polymorphic_allocatormemory_resource*를 내부에 보관하는 할당자예요. 표준 컨테이너와 함께 쓸 수 있으며, memory_resource를 교체하면 할당 동작이 바뀌어요.

같이 보기

  • std::pmr::memory_resource
  • std::pmr::polymorphic_allocator

더 알아보기 (Learn more)

cppreference