memory_resource — std::pmr::memory_resource

memory_resource — std::pmr::memory_resource

std::pmr::memory_resource는 C++17의 폴리모픽 메모리 자원(polymorphic memory resource)의 추상 기반 클래스예요. <memory_resource> 헤더에 제공돼요.

메모리를 할당·해제하는 공통 인터페이스를 정의해요. 파생 클래스가 do_allocate, do_deallocate, do_is_equal를 구현해서 각기 다른 할당 전략(풀, 모노토닉 버퍼, 시스템 할당 등)을 제공해요. 이를 통해 컨테이너의 할당자를 런타임에 바꿀 수 있어요.

출처: cppreference

본문

std::pmr::memory_resource는 메모리 자원의 추상 인터페이스예요.

class memory_resource
{
public:
    memory_resource() = default;
    virtual ~memory_resource();

    [[nodiscard]] void* allocate(size_t bytes, size_t alignment = alignof(max_align_t));
    void deallocate(void* p, size_t bytes, size_t alignment = alignof(max_align_t));
    bool is_equal(const memory_resource& other) const noexcept;

protected:
    virtual void* do_allocate(size_t bytes, size_t alignment) = 0;
    virtual void do_deallocate(void* p, size_t bytes, size_t alignment) = 0;
    virtual bool do_is_equal(const memory_resource& other) const noexcept = 0;
};

allocate는 바이트와 정렬을 받아 메모리를 할당하고, deallocate는 그 메모리를 해제해요. is_equal은 같은 자원 풀을 공유하는지 판별해요.

파생 자원들은 do_* 가상 함수를 구현해요. 예를 들어:

  • std::pmr::new_delete_resourcenew/delete 기반
  • std::pmr::null_memory_resource — 항상 실패 (할당 불가 테스트용)
  • std::pmr::monotonic_buffer_resource — 단조 증가 버퍼 (해제 없음, 고속)
  • std::pmr::synchronized_pool_resource / unsynchronized_pool_resource — 풀 할당

폴리모픽 메모리 자원의 핵심 가치는 런타임 다형성이에요. 같은 컨테이너 코드를 실행 중에 다른 메모리 전략으로 스위칭할 수 있어, 성능 프로파일링과 메모리 관리를 유연하게 해요.

같이 보기

  • std::pmr::polymorphic_allocator
  • std::pmr::pool_options

더 알아보기 (Learn more)

cppreference