для более подробной информации о ABI.
от вопрос уже есть ответ здесь:
При расширении структуры с дополнением, почему нельзя добавить дополнительные поля в дополнение к хвосту? 4 ответаЯ склонен думать, что довольно хорошо разбираюсь во внутреннем пространстве C ++ и разметке памяти, но это меня расстроило. У меня есть следующий тестовый код:
#include <stdio.h>
struct Foo
{
//Foo() {}
int x;
char y;
};
struct Bar : public Foo
{
char z[3];
};
int main()
{
printf( "Foo: %u Bar: %u\n", (unsigned)sizeof( Foo ), (unsigned)sizeof( Bar ) );
}
Вывод обоснованный:
Пн: 8 Бар: 12
Однако, это очень странная часть, если я раскомментирую этот простой конструктор по умолчанию в Foo (), то sizeof (Bar) изменится! Как добавление ctor может изменить структуру памяти этих классов?
Foo: 8 Бар: 8
Скомпилировано с использованием gcc-7.2