클래스의 크기
수업 중 구조체의 크기에 관한 내용이 있어 정리
구조체(or클래스)로 만들어진 데이터 형의 크기는 해당 구조체를 구성하고 있는 멤버 변수들의 크기를 합한 것이라고 배웠지만,
Visual C/C++ 에서는 구조체 멤버 맞춤(Struct member alignment)가 적용되어 구조체 선언 시에 데이터 형을 어떻게 배열했는지에 따라서 그 크기가 달라질 수 있다
(속성 > C/C++ > 구조체 멤버 맞춤, 에서 확인 가능)
자세한 규칙은 링크를 참고
간단하게 따지면 해당 구조체의 멤버 변수 중 가장 크기가 큰 멤버 변수를 기준으로 삼는다는 점
virtual 키워드가 들어가면 가상테이블을 참조할 포인터가 필요하기 때문에 더 늘어난다는 점
멤버 함수는 메모리 레이아웃에 포함되지 않는다는 건 잘 아실테고... (코드 섹션에 들어감)
ex)
멤버 변수로 char, char, int => 8바이트
멤버 변수로 char, char, int + virtual 함수 => 12바이트
멤버 변수로 char, char => 2바이트
멤버 변수로 char, char + virtual 함수 => 8바이트 (포인터 크기 4바이트를 기준삼는 듯하다)
멤버 변수로 char, char, double => 16바이트
멤버 변수로 char, char, double + virtual 함수 => 24바이트
> 까보진 않았지만 가장 앞이 가상테이블 주소 (이 과정에서 가장 큰 크기의 멤버변수 double 바이트만큼 할당)
> 뒤로 붙는 멤버 변수는 크기가 작더라도 새로 할당에서 쓰나보다
멤버 변수로 double, double => 16바이트
멤버 변수로 double, double + virtual 함수 => 24바이트
참고)
https://blog.naver.com/tipsware/221090063784
클래스의 크기
: C++ 언어 관련 전체 목차 http://blog.naver.com/tipsware/2210285599031. C 언어에서 구조체로 정의한...
blog.naver.com
https://blog.naver.com/tipsware/100161717624
Struct member alignment 에 대한 검증
C/C++ 프로그래머들이 많이 사용하는 구조체는 매우 유용한 사용자 정의 데이터형(Data Type) 입니다. ...
blog.naver.com