Условие задачи. Даны классы:
class Base {
int a;
char b;
};
class Derived : public Base {
char c;
int d;
};
Предположим, что sizeof( int ) == 4 и компилятор выравнивает int-поля на 4. Таким образом, sizeof( Base ) == 8.
Внимание, вопрос! Какой при этом размер класса Derived? Возможно, кого-то ответ удивит. Может быть 12 или 16.
При компиляции в gcc получается 12, попробуйте объяснить как это возможно. При компиляции в MSVC 2008 получается 16. Связанный вопрос: почему MS не экономят, как gcc? Может быть какие-то бонусы от этого? (есть одно предположение) Или просто лень реализовывать было?
Еще более интересный вопрос, и на него я не знаю ответа (может кто знает?). Если сделать оба поля Base публичными (одного недостаточно!), то размер становится 16! При этом публичность членов Derived на размер не влияет.