Здравствуйте, artem_korneev, Вы писали:
_>Столкнулся сегодня с одной проблемой. Есть структура данных, состоящая из нескольких полей — 64-битный float, потом 8 unsigned char и один Int32. Итого получается 20 байт (8 + 8*1 + 4). Под 32-битными системами sizeof равен 20 и всё работает нормально. А под 64-битным Linux'ом sizeof возвращает 24. Т.е. идёт выравнивание по границе 64 бит. Я пробовал добавлять в конец структуры директиву align:
_>struct ... {
_> ...
_>} __attribute__ ((align(4)));
_>Не помогает. Всё равно sizeof возвращает 24. Проверял по отдельности — размеры каждого элемента правильные, т.е. 8 байт на Float64, по одному байту на каждый unsigned char и 4 байта на Int32.
_>Пока сделал маленький костыль, принудительно используя значение 20, вместо sizeof, но мне этот костыль не нравится, хочется сделать по-человечески. Что можно покурить для просветления?
Попробуй
#pragma pack(4)
struct TwojaStructura {
...
};