4. Efficiency

효율적인 C++ 프로그램을 짜려면 어떻게 해야 할까?

16. Remember the 80-20 rule.

프로그램 자원의 80%는 코드의 20%에 의해 소모된다. 런타임의 80%는 코드의 20%에 의해 소모된다. 메모리의 80%는 코드의 20%에 의해 소모된다. 디스크 접근의 80%는 코드의 20%에 의해 소모된다. 유지보수 노력의 80%는 코드의 20%에 대해 소모된다. 프로파일링을 철저히 하라. 병목에 대해 잘 인지하여라.

17. Consider using lazy evalutaion.

지연 연산을 언제나 가능한 선택지로 고려하라. 복제는 필요한 시점까지 미루라. 같은 연산 내에서 읽기와 쓰기 동작을 구분하라. 데이터를 읽어들이는 것도 필요한 시점에 하라. 표현식에 대한 평가도 필요한 시점까지 미루라.

18. Amortize the cost of expected computations.

캐싱이나 선페칭 등을 통해 연산의 분할 상환 시간을 감소시키라. 이는 지연 연산과 모순되지 않는다.

19. Understand the origin of temporary objects.

const 참조자에 의한 전달과 값에 의한 전달은 임시 오브젝트 생성을 통한 묵시적 형변환을 가능케 한다. 비 const 참조자에 의한 전달은 불가능하다.

20. Facilitate the return value optimization.

컴파일러가 값에 의한 최적화를 진행하는 것을 돕도록 코딩하라.

21. Overload to avoid implicit conversions.

커스텀 클래스가 그 클래스로부터 형변환 가능한 타입을 받는 함수의 파라미터로 전달될 때 묵시적 형변환을 막기 위해서는 그 클래스 타입 자체를 받는 버전의 오버로딩을 만들면 된다.

22. Consider using op= instead of stand-alone op.

operator+= 가 대개 operator+보다 효율적이므로, operator+를 operator+=에 대해 구현하자.

23. Consider alternative libraries.

여러 라이브러리간 트레이드오프를 고려하고 적절한 것을 선택하라.

24. Understand the costs of virtual functions, multiple inheritance, virtual base classes, and RTTI.

오브젝트의 크기를 증가시키는가? / 클래스의 크기를 증가시키는가? / 인라이닝을 감소시키는가?

가상 함수의 경우에는 Y / Y / Y, 다중 상속의 경우에는 Y / Y / N, 가상 기반 클래스는 종종 / 가끔 / N, 런타임 타입 정보의 경우에는 N / Y / N이다.

댓글 남기기