STL 개요에 할당기를 같이 소개했어야 하는건데 빼먹었다.

그러므로 오늘 하겠다.

 

할당기는 컨테이너의 메모리 할당 정보와 정책(메모리 할당 모델)을 캡슐화한 STL 구성 요소이다.

할당기는 템플릿 클래스이며 모든 컨테이너는 기본 할당기를 사용한다.

STL의 할당기는 사용자 직접 할당기를 정의하고 사용할 수 있다.

 

사용자 정의 할당기는 사용자가 직접 메모리 할당 방식을 제어할 수 있게 한다.

필요성 예:

  • 다중 스레드에 최적화되고 안전한 사용자 메모리 할당 모델이 필요할 때
  • 사용자가 컨테이너에 맞는 메모리 할당 모델을 설계하거나 특정 구현 환경(implementation)에서 최적화된 메모리 할당 모델을 구축할 때

프로그램 대부분은 STL에서 제공하는 기본 할당기만으로 충분하므로 우리는 할당기를 자세하게 다루지 않는다(자세한 내용은 책에 있는 참고 문헌을 참고)

 

모든 컨테이너는 템플릿 매개변수에 할당기를 인자로 받는다. 기본 할당기는 allocator<T> 이며 컨테이너는 템플릿 매개변수에 디폴트 매개변수 값으로 기본 할당기를 지정한다.

 

vector라면 vector<typename T, typename Alloc=allocator<T>>처럼, set이라면

set<typename T, typename Pred=less<T>, typename Alloc=allocator<T>>처럼 지정한다.

 

다음은 vector와 set 컨테이너에 기본 할당기를 직접 지정한 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<vector>
#include<set>
 
int main()
{
    std::vector<int, std::allocator<int>> v;
 
    v.push_back(10);
    std::cout << *v.begin() << std::endl;
 
    std::set<int, std::less<int>, std::allocator<int>> s;
    s.insert(10);
 
    std::cout << *s.begin() << std::endl;
}
cs

 

'c++ > STL(뇌를 자극하는 STL)' 카테고리의 다른 글

list  (0) 2022.12.08
deque의 주요 인터페이스와 특징  (0) 2022.12.06
vector의 주요 인터페이스와 특징  (0) 2022.12.04
STL 개요  (0) 2022.12.03
std::pair  (0) 2022.11.09

+ Recent posts