1. 종류
- 벡터 (Vector)
- 맵 (Map)
- 셋 (Set)
- 스택 (Stack)
- 큐 (Queue)
- 리스트 (List)
- 덱 (Deque)
2. STL 컨테이너의 목적
- 템플릿 기반
- 모든 컨테이너에 적용되는 표준 인터페이스
- std 알고리즘은 많은 컨테이너에서 작동한다.
- 템플릿 프로그래밍 기반
- 메모리 자동 관리
3. 모든 컨테이너에 같은 인터페이스가 적용되는 것은 이상하다.
- 극단적으로 OOP를 추구한 사례에 해당한다.
- vector와 list의 push_back이 이상하다.
4. 메모리 단편화
- 빈번한 메모리 재할당은 메모리 단편화를 초래한다.
- 메모리를 내부적으로 100번을 재할당하든 뭐든 강제하지 않는다.
- 가상 메모리를 지원하지 않는 플랫폼에서 프로그램을 실행할 때 문제가 생긴다.
- 메모리 단편화 때문에 애플리케이션이 뻗어버릴 수 있다.
- 디버깅이 쉽지 않다.
- 이미 내부적으로 다 할당이 되어있는 경우 다른 컨테이너 혹은 배열로 전환하는 것이 힘들 것이다.
5. 회사내부에서 만드는 STL 대체품
- EA (Electronic Arts)
- EASTL
- STL과 호환된다.
- 오픈소스. 메모리 문제 등을 고쳤다.
- Epic Games (언리얼 엔진 4)
- TArray, TMap, TMultiMap, TSet
- STL 보다 나은 인터페이스로 구현한 언리얼만의 컨테이너
- 오픈 소스
- 한 번 살펴보는 것이 좋다.
- 직접 컨테이너를 만들어 보면 메모리 관리에 대한 이해를 높일 수 있을 것이다.
- C++ 프로젝트를 할 때, 컨테이너를 만들어서 사용하는 경우도 많다.
6. 성능이 중요한 프로그램에 제한되지 않는 오브젝트를 던지는 것이 말이 안 된다.
- 따라서 MAX값을 결정하는 것이 좋다.
- 재할당을 막아놓는 컨테이너를 만들기.
'Language > C++' 카테고리의 다른 글
[C++] 35.Unmanaged Programming: Map (1) | 2024.01.31 |
---|---|
[C++] 34.Unmanaged Programming: Vector (0) | 2024.01.31 |
[C++] 32.Unmanaged Programming: 적절한 예외 처리 (0) | 2024.01.31 |
[C++] 31.Unmanaged Programming: Exception (1) | 2024.01.31 |
[C++] 30.Unmanaged Programming: static 키워드 (1) | 2024.01.31 |