Задача про размер класса
От: Sir-G  
Дата: 11.05.11 08:02
Оценка: 2 (2) -1
Условие задачи. Даны классы:

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 на размер не влияет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.