일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 다형성
- c++
- exception
- Effective c++
- 비교 함수 객체
- 언리얼
- Vector
- implicit conversion
- 영화
- resource management class
- UE4
- 티스토리챌린지
- 암시적 변환
- 메타테이블
- operator new
- lua
- 상속
- effective stl
- reference
- 게임
- Smart Pointer
- 루아
- 반복자
- more effective c++
- 오블완
- 예외
- 참조자
- 영화 리뷰
- virtual function
- 스마트 포인터
Archives
- Today
- Total
스토리텔링 개발자
[More Effective C++] 15. 예외 처리 비용 본문
728x90
항목 15. 예외 처리에 드는 비용에 대해 정확히 파악하자
객체 생성 성공 여부를 체크하는 자료구조가 소모하는 메모리(항목 10 참조)
- 컴파일러에 따라선 예외 발생 여부를 꺼버릴 수도 있다.
- 극단적인 비용 절감을 위해서는 고려해 볼 수도 있을 것이다.
- 하지만 예외는 C++ 언어의 일부이므로 컴파일러가 이 비용을 완전히 없앨 수는 없다.
- 프로그램은 여러 개의 독립적인 오브젝트(.obj) 파일로 만들어진다.
- 하나의 오브젝트 파일이 예외를 사용하지 않는다고, 다른 오브젝트 파일도 그러리란 법은 없다.
- 오브젝트 파일들이 모두 예외를 사용하지 않는다 쳐도, 링크되는 라이브러리에서 사용한다면?
- 어느 한 부분이라도 예외를 사용하면, 프로그램 전체가 예외를 지원할 수밖에 없다.
- 만약, 예외를 지원하지 않는 라이브러리를 만든다면
- 예외 지원 버전에 비해서 훨씬 작고 빠르다. 하지만..
- 사용자 코드에서 라이브러리로 예외가 전파되면 안된다.
- 가상 함수 사용자 재정의와 콜백함수 등을 지원하면 안될 것이다.
- 솔직히 너무 힘든 일이다..
try 블록으로 인해 생기는 비용
- try 블록이 작성되기만 해도 무조건 지불해야 하는 비용이다.
- 오직 try 블록만 작성했을 뿐, 예외가 발생하지 않아도 비용은 증가한다.
- 이 경우, 컴파일러마다 천차만별이지만, 대략적으로는 5~10% 코드 크기와 실행 속도가 늘어난다.
- 예외 지정(예외 명세) 기능을 사용해도 try 블록과 비슷한 정도의 비용이 들어간다.
예외가 발생될 때의 비용
- 솔직히 예외 발생 시 소모되는 비용은 큰 관심사가 되지 못한다.
- 예외가 발생하는 경우는 극히 드물기 때문이다.
- 즉, 예외는 "발생될 가능성이 낮은 이벤트"가 일어났다는 것을 가르쳐주는 데이터에 불과하다.
- 80-20의 법칙(항목 16 참조)에 따르면 이는 프로그램 전체 수행 성능에 미치는 영향이 미미하다는 뜻이다.
- 하지만 빈번하게 발생하는 상황에 대해 예외 처리를 남발하면 안될 것이다.
- 통상적인 함수 복귀(return)에 비해 예외 발생(throw)에 의한 함수 복귀 속도는 10의 세 제곱 배(1000배)만큼 느리다.
728x90
'개발 > More Effective C++' 카테고리의 다른 글
[More Effective C++] 17. 지연 평가 (0) | 2024.08.22 |
---|---|
[More Effective C++] 16. 파레토 법칙 (0) | 2024.08.21 |
[More Effective C++] 14. 예외 지정(예외 명세) (0) | 2024.08.19 |
[More Effective C++] 13. catch 매개변수는 참조자 (0) | 2024.08.16 |
[More Effective C++] 12. 예외 전달 vs 함수 매개변수 전달 (0) | 2024.08.14 |
Comments