2012-08-31 5 views
1

하나 이상의 가상 함수가 포함 된 클래스 객체의 크기는 무엇인지 알고 싶습니다 (단 가상 함수 만 포함). 모든 사람들이 그 대답은 4라고 말합니다. 그러나 TCWIN45에서이 코드를 실행하려고 시도했을 때 2가 출력되었습니다.크기 하나 이상의 가상 함수가 포함 된 클래스의 객체

code

+1

코드를 이미지로 사용하지 말고 텍스트로 추가하십시오. – MSalters

답변

3

엄밀히 클래스 객체의 크기 미정이다.

동적 디스패치의 구현은 컴파일러에서 열린 상태로 유지됩니다. 구현은 원하는 메커니즘을 사용할 수 있으며 문서화 할 필요가 없습니다.

대부분의 구현은 가상 테이블 포인터 가상 포인터가 각 클래스 객체에 첨가하고, 그 오버 헤드를 추가하는 것을 특징 메커니즘을 사용한다. 또한 크기에 추가 할 수있는 다른 것들이있을 수 있습니다. 일반적

, 오브젝트

크기 = 비 정적 데이터 멤버의 사이즈 + 패딩 그것은 의존

0

, 그것은 보통 크기 (그것이 적용) vptr에서의 + 사이즈를 바이트 포인터 (4 또는 8Y이트) 중 하나이지만,이 경우 전역 테이블의 인덱스가 될 가능성이 높습니다. 컴파일러는 전체 프로그램에 2^16 이상의 다형성 클래스가 있다고 가정했을 것입니다.

EDIT : 전체 프로그램에서는 아니지만 최소한 현재 클래스 계층 구조에 있어야합니다.

2

"TCWIN45"는 구형 16 비트 컴파일러입니다. 거기에서 각 포인터는 2 바이트입니다. 일반적인 대답 (4)는 훨씬 더 일반적인 32 비트 컴파일러에 적용됩니다.

관련 문제