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_resource—new/delete기반std::pmr::null_memory_resource— 항상 실패 (할당 불가 테스트용)std::pmr::monotonic_buffer_resource— 단조 증가 버퍼 (해제 없음, 고속)std::pmr::synchronized_pool_resource/unsynchronized_pool_resource— 풀 할당
폴리모픽 메모리 자원의 핵심 가치는 런타임 다형성이에요. 같은 컨테이너 코드를 실행 중에 다른 메모리 전략으로 스위칭할 수 있어, 성능 프로파일링과 메모리 관리를 유연하게 해요.
같이 보기
std::pmr::polymorphic_allocatorstd::pmr::pool_options