2016년 3월 13일 일요일

[c++] 가상함수, 가상함수테이블

동작원리:  가상함수는 어떻게 동작을 할까? 객체가 생성되면 멤버 함수는 메모리의 코드영역에 올라가게 된다. 우리가 생성한 객체는 코드 영역에 있는 이 멤버함수를 공유하게 것이죠. 지만 클래스에 한개 이상의 가상 함수가 있을 경우에는 컴파일러는 실제 호출되어야 할 함수의 위치 정보를 가지고 있는 가상 함수 테이블(Vritual Table) 이라는 것을 만들고, 클래스의 객체에는 가상 함수 테이블을 위한 포인터가 멤버 변수로 추가 시킵니다. 일반적으로 가상 함수가 있는 객체는 가상 함수 테이블에 있는 함수만을 호출하는 원칙을 가지고 있다.


단점? : 가상 함수를 사용해서 생기는 단점은 두가지를 들 수 있다. 첫번째로, 가상함수를 쓰면 가상함수 테이블을 만드므로 그만큼의 메모리 공간의 소모가 일어 나게 되기 마련이고, 두번째로 직접 가야 할 부분을 이 가상함수 테이블을 거쳐 가야 하니까 속도면에서 약간의 차이가 나게 되는 단점이 있습니다. 이렇게 단점이 있는것을 왜 쓰냐? 그만큼의 장점 부분이 차지하는 부분이 더 크기 때문입니다.

댓글 없음:

댓글 쓰기

[Effective C++] 항목 30 : 인라인 함수는 미주알고주알 따져서 이해해 두자.

인라인 함수를 사용하면 컴파일러가 함수 본문에 대해 문맥별 최적화를 걸기가 용이해집니다. 인라인 함수의 아이디어는  함수 호출문을 그 함수의 본문으로 바꿔치기하자는 것  남발했다가는 코드의 크기가 커질 게 뻔하다. 인라인 함수로 부풀려진 ...