Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Размер struct


Автор: comp 17.6.2008, 20:24
Есть вот такой вот код:
Код

struct ST {
    int i;
    char ch;
    char ch2;
};
struct ST2 {
    char ch;
    int i;
    char ch2;
};
int main() {
    ST st; ST2 st2;
    int size1 = sizeof( st );
    int size2 = sizeof( st2 );
    return 0;
}


Два вопроса:
1. Почему размеры структур отличаются, когда мы переменную i описываем между чарами(ST2) и "вне" их(ST)...
2. Почему размер ST равен 8ми байтам. Ведь, по-идее, должен равняться 6ти(int - 4, char - 1. 4 + 1 + 1 =  6). Откуда беруться лишние 2 байта?

Автор: Daevaorn 17.6.2008, 20:29
Поиском по форуму пользовались?
Гуглом владеете?
Если нет, то http://en.wikipedia.org/wiki/Data_structure_alignment

Автор: baldina 17.6.2008, 21:27
ну не знает человек, объясните, чего ругаться...

comp, добавь в начало #pragma pack(1) и будет как ты ожидаешь. Дело в том что по умолчанию используется выравнивание структур данных по границе машинного слова (но в принципе может быть любым). Ссылка полезная у тебя есть. Если кратко - это позволяет более эффективно использовать процессор.

Автор: vinter 17.6.2008, 21:45
Цитата(baldina @  17.6.2008,  22:27 Найти цитируемый пост)
чего ругаться...

просто довольно частый вопрос и здесь было много раз.

Автор: knut 18.6.2008, 09:23
comp, вот посмотри http://www.rsdn.ru/Forum/?mid=629371

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)