Language/C++

[C++] 33.Unmanaged Programming: STL 표준 템플릿 라이브러리

coco_daddy 2024. 1. 31. 01:07

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값을 결정하는 것이 좋다.
  • 재할당을 막아놓는 컨테이너를 만들기.