자체 컨테이너 성능 비교

JellyPower·2025년 11월 26일

나만 몰랐던 C++

목록 보기
12/12
post-thumbnail

자체컨테이너를 왜 쓸까?

  • 많은 회사들, 특히 C++을 사용하는 회사들의 경우 자체 컨테이너를 제작하여 씁니다.
  • C++에는 STL이라는 기본적으로 제공하는 컨테이너가 있음에도 불구하구요
  • 에픽 게임즈의 언리얼 엔진의 경우에는 TMap, TArray, TSet같은 컨테이너를 지원하구요
  • 세계적인 대기업인 EA게임즈의 경우에도 EASTL이라는 자체 stl을 제작하여 사용하고 이를 오픈소스로 공개해놓기도 하였습니다.
  • 대체 왜 무료, 다양한 기능, 표준화된 템플릿을 제공하는 C++STL을 쓰지 않고 자체적으로 컨테이너를 만들어 쓸까요?

세간에 떠도는 STL괴담

  • 세간에서 말하는 STL을 쓰지 않는 이유들은 다음과 같습니다.
    1. 게임을 제작할 때 필요없는 부가적인 기능들이 많다
    2. 범용성을 챙기느라 좋은 성능을 챙기지 못했다
    3. 알게 모르게 일어나는 메모리 할당/해제가 많다
    4. 범용성을 위한 기능들 때문에 빌드 속도가 느리다
    5. 등등…
  • 그리고 자체 컨테이너의 장점은 다음과 같습니다.
    1. 직접 만든 코드라서 커스텀하고 새로운 기능을 구현하기 쉽다
    2. 범용성이 필요 없기에 좋은 성능을 만들어내기 좋다

제가 직접 만들어보고 판단하겠습니다

  • 그런데 그렇다더라 하는 소문과 말만 듣고 편견을 가지는건 나쁜 일이죠
  • 그러면 어떻게 해야할까요? 직접 컨테이너들을 만들어보고 성능을 비교해보면 됩니다!
  • 자료구조가 단순할수록 큰 차이가 없을거기 때문에 비교적 복잡도가 높은 직접 구현한 HashMap을 통해 비교해보도록 하죠!

테스트 환경

  • 측정 시간: Add, Find, Remove 연산 10000번 반복
  • 테스트 타입
    • Test1:
      • KeyType → int
    • Test2:
      • KeyType → String
      • HashFunction → CityHash
  • 두 컨테이너는 모두 해시 버켓과 리스트들을 삽입한 아이템 개수의 2배 양만큼 Reserve 해놓은 상태입니다.

성능 결과

결과: (STL소모시간)/(자체컨테이너 소모시간)

Trial0Trial1Trial2Trial3Trial4Avg.
Test1 (int)2.19402.28892.22572.56082.03602.26108
Test2 (String)1.80121.83121.58271.57071.53031.66322

결론

  • 간단한 int 해시의 경우 자체 컨테이너가 2배 이상 빨랐습니다.
  • 비교적 복잡한 해시 연산의 String 해시의 경우 자체 컨테이너가 1.6배 정도 빨랐습니다.
  • STL 컨테이너가 제공하는 기능 중 추가, 탐색, 제거를 제외하고 전체 아이템 이터레이션과 같은 기능을 같이 고려하여 제작했어도 전반적인 성능에서 더욱 좋은 결과를 낼 수 있었습니다.

코드 출처

profile
게임엔진코드싸개(진)

0개의 댓글