Re: gcc, Выравнивание на 64-битных архитектурах
От: ra88  
Дата: 22.04.09 14:09
Оценка: 31 (2) +1
Здравствуйте, 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 {
...
};
while true;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.