Game Dev/Article

CppCon2014 : C++ in Huge AAA Games

AKer 2016. 10. 8. 18:58
반응형

발표자

유비소프트 몬트리얼 개발자, 아마도 Rainbow Six 프로젝트에서 일하는 듯


Code Structure



하지 않는 것

  • RTTI : 별도의 Type 추론 구현
  • Exception Handling : 느리니까
  • STL Container : STL Algorithm은 사용하지만 Container는 사용하지 않음
  • Boost in Engine

Iteration-Time

  • FastBuild 사용
  • Debug 환경에서 /Ob1 사용
    • /Ob : Inline 함수 최적화 여부 (기본값 2)
    • 1로 설정하면
      • Compiler가 자동으로 inline 확장 대상을 선택하던 것을 하지 않음 (링크 시간이 빨라짐)
      • inline, __inline, __forceinline 키워드가 붙은 함수나 Header에 정의 된 멤버함수만 inline 확장
  • Template 클래스는 Non-template 클래스를 상속
  • 필요없는 #include 제거

Performance

  • 10%의 코드가 90%의 시간을 잡아먹는다!
  • Data Cache Miss를 최소화 하자.
    • Singleton도 static 변수로 구현하는 대신 placement new로 구현
    • virtual function도 잘 쓰지 않는듯...

  • Heap 사용을 최소화 한다.
    • 느리기도 하고 Fragmentation을 피하는 것이 관건
    • vector 보다는 fixed size array
    • FrameAllocator라는 별도의 Allocator를 만들어서 사용
      • 매 프레임이 끝날 때 비어있는지 검사
      • 즉 이번 프레임에서만 쓰는 메모리이며, Fragmentation을 방지한다.
      • 페르시아의 왕자에 적용했더니 Fragmentation이 모두 사라짐... 40시간 플레이해도 거뜬!


Debugging

  • 제거한 기능
    • Iterator Debugging (_ITERATOR_DEBUG_LEVEL 같은것)
    • No Debug Heap (_NO_DEBUG_HEAP 1)
    • Windows Fault Tolerant Heap
  • Release Code Debugging
    • 어셈블리를 잘 보여주는 Visual Studio Extension 적극 활용
  • Callstack이 깨졌을 때
    • rip 레지스터에 괜찮아 보이는 값을 넘겨보자



  • Memory에 별도의 이름을 넘겨서 마킹
    • Memory Leak 등을 찾을 수도 있음


https://www.youtube.com/watch?v=qYN6eduU06s


C in Huge AAA Games - Nicolas Fleury - CppCon 2014.pdf


반응형

'Game Dev > Article' 카테고리의 다른 글

Light Pre-Pass Renderering (=Deferred Lighting)  (0) 2016.10.09
Light Indexed Deferred Rendering  (0) 2016.10.08
C4265 Warning을 켜자!  (0) 2016.09.22
x64와 x86에서의 float 연산  (0) 2014.10.30