среда, 8 июля 2009 г.

Выравнивание

Определим структуру struct S {char a; bool b; int c}. Считаем, что sizeof(a) = sizeof(b) = 1, sizeof(c) = 4. Что выдаст sizeof(S)?

Может быть, 6? Не-а! Восемь. Все из-за выравнивания. Если считать, что поле a размещается по адресу 0, то с - по адресу 2 (по логике). Но процессору удобнее, если слова (word) расоплагаются по четным адресам, а int - по адресам, кратным 4. Т.е. поле с будет сдвинуто, память между b и с будет забита мусором.

Комментариев нет: