부재 : 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 클래스 코드

more..



사용법

more..


RTTI 에 대한 자세한 설명은 링크를 첨부한다.
http://flashcafe.org/bbs/board.php?bo_table=programming_study&wr_id=89&page=7&page=7


좀 졸리다..
결론은 역시 각 비용이 들기 떄문에 필요없는데도 쓰지 말라, 필요하다면 쓰는것이 제일 효율적이라는 말.

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요