하나 이상의 가상 함수가 포함 된 클래스 객체의 크기는 무엇인지 알고 싶습니다 (단 가상 함수 만 포함). 모든 사람들이 그 대답은 4라고 말합니다. 그러나 TCWIN45에서이 코드를 실행하려고 시도했을 때 2가 출력되었습니다.크기 하나 이상의 가상 함수가 포함 된 클래스의 객체
1
A
답변
3
엄밀히 클래스 객체의 크기 미정이다.
동적 디스패치의 구현은 컴파일러에서 열린 상태로 유지됩니다. 구현은 원하는 메커니즘을 사용할 수 있으며 문서화 할 필요가 없습니다.
대부분의 구현은 가상 테이블 포인터 가상 포인터가 각 클래스 객체에 첨가하고, 그 오버 헤드를 추가하는 것을 특징 메커니즘을 사용한다. 또한 크기에 추가 할 수있는 다른 것들이있을 수 있습니다. 일반적
, 오브젝트
크기 = 비 정적 데이터 멤버의 사이즈 + 패딩 그것은 의존
0
, 그것은 보통 크기 (그것이 적용) vptr에서의 + 사이즈를 바이트 포인터 (4 또는 8Y이트) 중 하나이지만,이 경우 전역 테이블의 인덱스가 될 가능성이 높습니다. 컴파일러는 전체 프로그램에 2^16 이상의 다형성 클래스가 있다고 가정했을 것입니다.
EDIT : 전체 프로그램에서는 아니지만 최소한 현재 클래스 계층 구조에 있어야합니다.
2
"TCWIN45"는 구형 16 비트 컴파일러입니다. 거기에서 각 포인터는 2 바이트입니다. 일반적인 대답 (4)는 훨씬 더 일반적인 32 비트 컴파일러에 적용됩니다.
관련 문제
- 1. VM웨어 : 하나 개 이상의 가상 서버
- 2. Visifire - 하나 이상의 바인딩이 포함 된 사용자 정의 툴팁
- 3. Apache2 Ubuntu에 하나 이상의 가상 호스트가 있습니다.
- 4. 가상 함수 만 포함 된 클래스의 크기가 영향을받는 이유는 무엇입니까?
- 5. 하나 이상의 ggplot 패싯에 포함 된 데이터의 서브 세트
- 6. 하나 이상의 시계열이 포함 된 데이터 프레임에서 플로팅
- 7. 하나 이상의 팩트 테이블?
- 8. 직렬화 된 객체 크기?
- 9. Symfony/Doctrine : 여러 객체/함수가 포함 된 트랜잭션
- 10. 디자인의 조언 : 포함 된 객체
- 11. 가상 메소드가 포함 된 클래스로 CreateFileMapping
- 12. 포함 된 객체
- 13. 동일한 가상 서버에있는 하나 이상의 Asp.Net WebApplication 프로젝트
- 14. 하나 이상의 함수가 WCF를 호출하지 않는 이유는 무엇입니까?
- 15. 하나 이상의 JQuery 함수가 Codebehind에서 호출하지 않는 이유
- 16. 하나 이상의 tickbox 하나 개의 DB 컬럼
- 17. 하나 이상의 HTML 파일에 하나 이상의 CSS 스타일 시트 사용
- 18. 하나 이상의 Zend_Cache 설정?
- 19. 하나 이상의 CCScrollLayer
- 20. 하나 개 이상의 값이
- 21. 갤러리 - 하나 이상의 그림보기
- 22. 하나 이상의 응답을 얻으십시오
- 23. 하나 개 이상의 필드
- 24. 하나 이상의 소스와 numpy.searchsorted
- 25. UITableView에서 하나 이상의 이미지
- 26. 사용자에게 하나 이상의 역할
- 27. 하나 이상의 테이블을 Mysqldump합니까?
- 28. 하나 이상의 수신기가있는 ActiveMQ
- 29. 하나 이상의 보존 문서 제거
- 30. Tkinter : 하나 이상의 메인 루프?
코드를 이미지로 사용하지 말고 텍스트로 추가하십시오. – MSalters