13
C++ 게게게 게게게 게게게 ( 게게게게 ) 6 게 25 게 GPG2 게

[Gpg2권]1.1 c++ 게임의 최적화

Embed Size (px)

Citation preview

Page 1: [Gpg2권]1.1 c++ 게임의 최적화

C++ 게임의 최적화

구경원 ( 돼지고기 )6 월 25 일

GPG2 권

Page 2: [Gpg2권]1.1 c++ 게임의 최적화

C++ 게임의 최적화

- 프로파일링의 중요성- 잘못된 코드에 대한 최적화 .- 최적화를 했는데도 속도가 떨어지는 경우 . - 자주 호출되는 코드에 대한 최적화 .

Page 3: [Gpg2권]1.1 c++ 게임의 최적화

객체가 필요하게 되기 전까지는 생성하지 말 것

void Function(int arg){

Object obj;if(arg == 0)

return;…}

arg 가 0 일때에도 Object 객체 생성 .필요한 선언을 최대한 뒤로 미루자 .반복문일 경우는 루프 밖에 객체를 선언하자 .

Page 4: [Gpg2권]1.1 c++ 게임의 최적화

초기화 목록을 사용할 것

Class Vehicle{

public:Vehicle(const std::string &name)

{ m_Name = name; }private:std::string m_Name;

}

Vehicle 생성자 호출전 string m_Name 에 대한 생성자 호출 .m_Name = name 의 복사대입 연사자 호출 .Vehicle 기본생성자도 메모리에 할당할 수 있다 .

Class Vehicle{

public:Vehicle(const std::string &name)

: m_Name(name)private:std::string m_Name;

}

Page 5: [Gpg2권]1.1 c++ 게임의 최적화

후증가 보다는 전증가를 사용할 것

x++ 자기 자신의 복사본을 생성한 후 값을 넘긴다 .

++x 자기 자신을 증가시킨 후 넘긴다 .

for 문같은 반복문에서는 전증가 사용이 좋다 .

*this += 1;Return *this;

Const int Value = *this;++(*this);Return Value;

Page 6: [Gpg2권]1.1 c++ 게임의 최적화

값을 반환하는 연산자를 피할 것Vector operator+(const Vector &v1, const Vector &v2)V = v1 + v2;Vector 의 임시객체를 생성하고 복사 ( 값으로 반환 ) 하는 추가적인부담을 야기시킨다 .

Void Vector::Add(const Vector &v1, const Vector &v2)V = v1.Add(v2);첫번째 인자를 즉시 수정하여 사용하기 때문에 임시객체를 반환할 필요가 없다 .

Page 7: [Gpg2권]1.1 c++ 게임의 최적화

가벼운 생성자를 사용할 것

- 생성자가 호출될 때 마다 초기화가 필요하지 않는 변수들도 초기화가 일어난다 .

- 자주 사용되는 행렬이나 벡터는 초기화 함수로 따로 관리하자 .

- 자동으로 객체를 복사하고 싶지 않으면 Operator= 를 private 로 선언하자 .

- 내부적인 임시객체 생성을 방지하기 위해서 explicit 를 선언하는 습관을 들이자 .

Page 8: [Gpg2권]1.1 c++ 게임의 최적화

객체를 미리 할당하고 캐싱할 것

- 게임에서 번번하게 할당 , 해제되는 클래스 .

배열 . 리스트 . 맵 . 등의 자료구조를 이용해서 미리 필요한

데이터를 할당하고 사용이 필요할때에 데이터를 가져와서 사용하고 , 사용이 다된 객체는 다시 돌려보낸다 .

Page 9: [Gpg2권]1.1 c++ 게임의 최적화

메모리 관리- 암시적인 메모리 할당 주의- 힙메모리 단편화를 주의하자 .- 메모리를 미리 할당하자 .

Page 10: [Gpg2권]1.1 c++ 게임의 최적화

가상 함수

가상함수 호출 -> 가상함수 테이블 참조 ->멤버함수 포인터얻기 -> 멤버함수 호출 .추가적인 오버헤드 발생 .

작고 자주 쓰이는 객체들은 클래스 상속구조를 사용하지 말고 상속 구조에서 독립 시키자 .

Page 11: [Gpg2권]1.1 c++ 게임의 최적화

코드 크기

- 실행파일을 최대한 작게 만들자 .- 예외를 발생시키는 코드를 제거 .- 쓰이지 않는 함수와 클래스를 빌드에서 제외- 컴파일러 최적화 수준을 높게 설정한다 .- 속도보다는 크기에 대한 최적화를 실행하도록 설정한다 .- 인라인 함수의 사용 주의 .- RTTI 와 dynamic_cast 의 사용 자제 .

Page 12: [Gpg2권]1.1 c++ 게임의 최적화

표준 템플릿 라이브러리

- STL set() 을 사용하려면 STL vector() 을 사용하자 .

Set() 을 사용하면 적 - 흑 트리에 기반하여해당하는 노드를 찾아야 한다 .트리의 노드들은 여기 저기 흩어져 있을 수 있으므로 캐시미스가 발생할 수도 있다 .

Page 13: [Gpg2권]1.1 c++ 게임의 최적화

참고자료

END