반응형
발표자
유비소프트 몬트리얼 개발자, 아마도 Rainbow Six 프로젝트에서 일하는 듯
Code Structure
하지 않는 것
- RTTI : 별도의 Type 추론 구현
- Exception Handling : 느리니까
- STL Container : STL Algorithm은 사용하지만 Container는 사용하지 않음
- Boost in Engine
Iteration-Time
- FastBuild 사용
- http://fastbuild.org/docs/home.html
- 무려 OpenSource
- Distribution, Caching 지원 (Caching이 잘 되어있으면 3분, 아니면 5분의 Rebuild)
- Unity Build와 연동
- Debug 환경에서 /Ob1 사용
- /Ob : Inline 함수 최적화 여부 (기본값 2)
- 1로 설정하면
- Compiler가 자동으로 inline 확장 대상을 선택하던 것을 하지 않음 (링크 시간이 빨라짐)
- inline, __inline, __forceinline 키워드가 붙은 함수나 Header에 정의 된 멤버함수만 inline 확장
- Template 클래스는 Non-template 클래스를 상속
- 필요없는 #include 제거
- 자체 개발한 버전을 사용 중이지만 include-what-you-use를 사용해라!
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 |