내가 아는 것에서 C ++의 클래스 크기는 아래 요인에 따라 다릅니다.
- 모든 비 정적 데이터 멤버의 크기
- 데이터 멤버의 순서.
- 바이트 패딩이 사용 가능한지 여부
- 바로 기본 클래스의 크기입니다.
- 가상 기능의 존재.
- 상속 모드 (가상 상속).
이제 아래와 같이 2 개의 클래스를 만들었습니다.
class A{
int a;
short s;
int b;
char d;
};// kept a char at last on purpose to leave a "hole"
class B : public A{
char c;
};
이제 A와 BI의 크기를 확인하십시오.
- A의 크기 : 16
- B 사이즈 : 16
내 가정은 클래스 B의 문자 c가 클래스 A의 "구멍"에 수용된다는 것입니다.
그러나 나를 혼란스럽게하는 것은 회원을 공개하는 아래 시나리오입니다.
class A{
public:
int a;
short d;
int b;
char s;
};
class B : public A{
public:
char c;
};
이제 크기는
- A의 크기 : 16
- B의 크기 : 20
이 차이의 이유를 이해할 수없는 것 같습니다.
1
왜 C ++에서 클래스의 크기가 데이터 멤버의 공개 / 개인 상태에 의존합니까? -그렇지 않습니다. 이것들은 컴파일러에 따라 구현되는 세부 사항입니다.
—
PaulMcKenzie
그래서 어떤 컴파일러를 사용하고 있습니까?
—
Romen
@PaulMcKenzie 사실 그렇습니다. 표준은 동일한 액세스 권한을 가진 멤버를 그룹화하여 컴파일러의 패딩 전략을 변경하도록 변경합니다.
—
NathanOliver
@ NathanOliver-ReinstateMonica, 나는 그것을 몰랐다. 관련 섹션을 참조 할 수 있습니까?
—
R Sahu
@RSahu 내 대답을 꽉 채울 때까지 찾고 있습니다.
—
NathanOliver