С учетом этого кода:
#include <iostream>
struct A {
};
struct B {
};
struct C {
};
struct E : A {
int field;
};
struct F : A, B {
int field;
};
struct G : A, B, C {
int field;
};
int main() {
std::cout << _MSC_VER << std::endl;
std::cout << sizeof(E) << std::endl;
std::cout << sizeof(F) << std::endl;
std::cout << sizeof(G) << std::endl;
int o;
std::cin >> o;
return 0;
}
Мне дается следующий вывод:
1900
4
8
8
Почему F
и G
имеют размеры 8
, хотя их базы пустые?
И почему размер E
также не увеличивается?
Я создаю это с помощью Visual Studio Community 2015, версия 14.0.25431.01. Обновление 3. Версия MSVС++, по-видимому, 9.0.
Как получилось? Какое обоснование существует для такого своеобразного макета памяти?