책 정리/More Effective C++ 1판
항목 24 : 가상 함수, 다중 상속, 가상 기본 클래스, RTTI에 들어가는 비용을 제대로 파악하자
최익필
2008. 5. 22. 21:11
부재 : virtual 의 비용은 얼마인가?
이유
1. 구현에 따라 가상 함수(virtual function)가 성능에 영향을 미치기 때문이다.
구현방법
: 구현 방법은 없으며 개념 정리된 부분을 이해 하고 있어야 한다.
개념 정리
1. 가상 함수를 사용하면 가상 테이블(virtual table)과 가상 테이블 포인터(virtual table pointer)가 생긴다.
(객체의 한쪽에 vtbl 을 가르키는 vptr이 만들어 진다)
2. 구현 방법에 따라 이 vtbl은 객체의 크기와 멤버 함수가 실행될 때의 속도에 영향을 끼친다.
3. 가상함수는 인라인 효과를 얻을 수 없다.
4. 가상상속(다이아몬드 상속을 피하기 위해)을 하면, 가상 기본 클래스의 포인터도 객체에 포함되어 덩치가 커진다.
5. RTTI는 vtbl 위에 있다, 그러므로 가상 함수가 있는 클래스만이 사용할수 있다. RTTI 정보는 type_info 타입의 객체에 정보를 저장하며 typeid(객체) 연산자를 통하여, 연산자를 통하여 접근 가능하다.
type_info 클래스 코드
사용법
http://flashcafe.org/bbs/board.php?bo_table=programming_study&wr_id=89&page=7&page=7
좀 졸리다..
결론은 역시 각 비용이 들기 떄문에 필요없는데도 쓰지 말라, 필요하다면 쓰는것이 제일 효율적이라는 말.
이유
1. 구현에 따라 가상 함수(virtual function)가 성능에 영향을 미치기 때문이다.
구현방법
: 구현 방법은 없으며 개념 정리된 부분을 이해 하고 있어야 한다.
개념 정리
1. 가상 함수를 사용하면 가상 테이블(virtual table)과 가상 테이블 포인터(virtual table pointer)가 생긴다.
(객체의 한쪽에 vtbl 을 가르키는 vptr이 만들어 진다)
2. 구현 방법에 따라 이 vtbl은 객체의 크기와 멤버 함수가 실행될 때의 속도에 영향을 끼친다.
3. 가상함수는 인라인 효과를 얻을 수 없다.
4. 가상상속(다이아몬드 상속을 피하기 위해)을 하면, 가상 기본 클래스의 포인터도 객체에 포함되어 덩치가 커진다.
5. RTTI는 vtbl 위에 있다, 그러므로 가상 함수가 있는 클래스만이 사용할수 있다. RTTI 정보는 type_info 타입의 객체에 정보를 저장하며 typeid(객체) 연산자를 통하여, 연산자를 통하여 접근 가능하다.
type_info 클래스 코드
사용법
RTTI 에 대한 자세한 설명은 링크를 첨부한다.
http://flashcafe.org/bbs/board.php?bo_table=programming_study&wr_id=89&page=7&page=7
좀 졸리다..
결론은 역시 각 비용이 들기 떄문에 필요없는데도 쓰지 말라, 필요하다면 쓰는것이 제일 효율적이라는 말.