부재 : 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
좀 졸리다..
결론은 역시 각 비용이 들기 떄문에 필요없는데도 쓰지 말라, 필요하다면 쓰는것이 제일 효율적이라는 말.
'책 정리 > More Effective C++ 1판' 카테고리의 다른 글
항목 28 : 스마트 포인터(Smart Pointer) (0) | 2008.05.26 |
---|---|
항목 27 : 힙에만 생성되거나 힙에는 만들어지지 않는 특수한 클래스 만드는 방법 (0) | 2008.05.22 |
항목 26 : 클래스 인스턴스의 개수를 의도대로 제한하는 방법 (0) | 2008.05.22 |
항목 25 : 생성자 함수와 비멤버 함수를 가상 함수처럼 만드는 방법 (0) | 2008.05.22 |
유용하고 재미있는 프로그래밍 기법들(Techniques) (0) | 2008.05.22 |
항목 23 : 정 안 되면 다른 라이브러리를 사용하자! (0) | 2008.05.22 |
항목 22 : 단독 연산자(op) 대신에 =이 붙은 연산자(op=)를 사용하는 것이 좋을 때가 있다. (0) | 2008.05.22 |
항목 21 : 오버로딩은 불필요한 암시적 타입변환을 막는 한 방법이다. (0) | 2008.05.20 |
항목 20 : 반환값 최적화가 가능하게 하자. (0) | 2008.05.20 |
항목 19 : 임시 객체의 원류를 정확히 이해하자. (0) | 2008.05.20 |
최근댓글