Цитата(boez @ Dec 7 2006, 14:23)

Вообще в гнутом С для выравнивания придуман атрибут, и там таких приколов (биты или байты) нету.
aligned (alignment)
This attribute specifies a minimum alignment (in bytes) for variables of the specified type.
Или щас в кейле компилятор не гнутый?
А вообще вот вы мне объясните, кто понимает - ведь массив это _единая_ переменная. Да, ее размер тоже обязан быть кратным выравниванию, в данном случае 4 (тоже кстати вопрос - а с какой радости по умолчанию байты ровняются по 4). Но он и так будет, 16 кратно 4. А тут я так понимаю компилер раскладывает байты с трехбайтными дырками? А если мне это пакет пришел и я его разобрать хочу? Как это оно вообще так получается?
ИМХО тут надо разобраться в этих исходных
Цитата
char p[16] - занимает 64 байта памяти.
Если это так то причин м.б. 2.
1. alignment на 64 байта, но сам массив занимает смежные 16 байт.
2. каждый элемент массива занимает по 4 байта (1+3), но тут ИМХО уже на упаковку (#pragma pack(), __attribute__ ((__packed__)) и прочие) глядеть надо.