Если создать 2 таких класса:
class A
{
double a;
double b;
};
class B : public A
{
char a;
};
и взять sizeof(B), то получим 24.
Eсли добавить в класс А поле типа int, то sizeof(B) будет так же равен 24 (такой же результат будет если в классе B заменить char на int)
class A
{
double a;
double b;
int c;
};
class B : public A
{
char a;
};
Почему в этих 2 случаях размер класса в байтах совпадает?
Компилятор gcc.
PS: с компилятором от студии выдает 32 байта
Вопрос не имеет никакого отношения к наследованию. В тех же реализациях вы получите тот же самый результат в случаях
struct A1
{
double a;
double b;
char c;
};
struct A2
{
double a;
double b;
int c;
char d;
};
Оба класса будут иметь размер 24.
Требования выравнивания самого большого из использованных типов double (выравнивание на 8) диктуют, что размер класса с двумя полями double и "еще чем-то" должен быть как минимум 24. А остальные поля, с их более слабыми требованиями выравнивания, просто помещаются в лишние байты этого размера. Пока они помещаются, размер расти не будет.
Такой класс тоже будет иметь размер 24
struct A3
{
double a;
double b;
char c1, c2, c3, c4, c5, c6, c7, c8;
};
Но если вы добавить в него еще хоть один char, то размер станет 32.
Продвижение своими сайтами как стратегия роста и независимости