1 분 소요

개요

polymorphic_allocator는 런타임 다형성을 지원하는 할당자로서 메모리 리소스를 이용합니다.

<memory_resource> 헤더 파일을 포함해야 하며, std::pmr 네임스페이스를 사용합니다.

메모리 풀

메모리 할당이 필요할때마다 메모리 할당을 시도하면, 메모리 할당/해제가 빈번하게 발생하므로 속도가 저하됩니다. 따라서 거대한 메모리 풀을 만들어두고 해당 영역에 개체를 할당하여 속도를 향상시킬 수 있습니다.

다음은 스택에 100byte 크기의 메모리 풀을 사용하고, vector요소 생성시 해당 메모리 풀에 사용하는 예입니다. 실질적인 메모리 할당과 해제를 한번만 하기 때문에 속도 효율적입니다.

1
2
3
4
5
6
7
8
9
unsigned char data[100]; // 100 byte 공간을 할당합니다.
std::pmr::monotonic_buffer_resource pool{data, sizeof(data)}; // 모든 요소가 소멸되면 메모리를 한번에 해제합니다.
std::pmr::polymorphic_allocator<int> pa{&pool};

std::vector<int, std::pmr::polymorphic_allocator<int>> v(pa); 

v.push_back(1); 
v.push_back(2);
EXPECT_TRUE(v[0] == 1 && v[1] == 2); 

polymorphic_allocator

항목 내용
allocate(n) (C++17~) nbyte만큼 메모리를 할당합니다.
deallocate() (C++17~) 메모리 할당을 해제합니다.
construct() (C++17~) 주어진 메모리 위치에서 개체 생성자를 호출합니다.
destroy() (C++17~C++20) 주어진 메모리 위치에서 소멸자를 호출합니다.
select_on_container_copy_construction() (C++17~) (작성중)
resource() (C++17~) 사용하는 메모리 리소스를 리턴합니다.
allocate_bytes(n, alignment) (C++20~) 주어진 메모리 정렬방식으로 nbyte만큼 메모리를 할당합니다.
deallocate_bytes() (C++20~) 주어진 메모리 정렬방식으로 할당된 메모리를 해제합니다.
allocate_object() (C++20~) 주어진 개체의 메모리를 할당합니다.
deallocate_object() (C++20~) 주어진 개체의 메모리를 해제합니다.
new_object() (C++20~) 주어진 메모리 위치에서 개체 생성자를 호출합니다. construct()와 달리 예외 발생시 메모리를 해제합니다.
delete_object() (C++20~) 주어진 메모리 위치에서 소멸자를 호출하고 deallocate_object()를 호출하여 메모리를 해제합니다.

메모리 리소스

항목 내용
memory_resource (C++17~) 메모리 리소스의 추상 클래스입니다.
synchronized_pool_resource (C++17~) 쓰레드에 안전한 메모리 풀입니다.
unsynchronized_pool_resource (C++17~) 쓰레드에 안전하지 않은 메모리 풀입니다.
monotonic_buffer_resource (C++17~) 자원이 소멸된 경우에만 메모리를 해제하는 특수 목적 메모리 풀입니다.
항목 내용
new_delete_resource() (C++17~) 전역 new, delete를 사용하는 메모리 리소스를 리턴합니다.
null_memory_resource() (C++17~) 메모리 할당을 안하는 메모리 리소스를 리턴합니다.
get_default_resource() (C++17~) 기본 메모리 리소스를 구합니다.
set_default_resource() (C++17~) 기본 메모리 리소스를 설정합니다.
pool_options (C++17~) 풀 생성시 사용하는 옵션입니다.

태그:

카테고리:

업데이트:

댓글남기기