LINUX.ORG.RU

gcc - выравнивание


0

0
есть структура, 2 поля - short & long, сумма размеров полей вроде как 6, sizeof структуры - 8 . лечится компиляцией с опцией, которая запрещает выравнивание по 2-е. вопрос - что за опция?
anonymous
Эта опция называется #pragma pack(1)/#pragma pack(). Вот только для обычных приложения не связанных с протоколами и работы с железом пользоватся этим не надо, выгоды в размере не получишь, зато здорово пролетишь в скорости доступа к членам структуры/класса.
anonymous
()
Зачем вводить людей в заблуждение? В GCC никакой #pragma pack нет и вообще в GCC (особенно до 3.0) прагм практически нет; более того есть специальная глава в доке, объясняющая *почему* их нет А так в приницпе опция -fpack-struct (вот только я не помню в какой версии она появилась). Но лучше использовать __attribute__((packed)) при той структуре, которую надо упаковать
aa5779
()
А ты попробуй и увидишь, что есть, по крайней мере в 2.96
anonymous
()
2.95.2 прекрасно работает с #pragma pack
anonymous
()
Оно и правда. И тем не менее, зачем ей пользоваться? Только если нужно обеспечить совместимость с DOS/Windows компиляторами В GCC есть более элегантный механизм аттрибутов
aa5779
()
нне бейте ногами если не прав,но по-моему, по стандарту Ц размер структуры должень быть кратен самому крупному ее полю (в данном случае лонгу)

buddha
()
Я тут с TVision балуюсь, так там для передачи данных в окошко надо
 структуры заполнять, наступил на те же грабли с выравниванием и
 сделал просто типа:

struct{
unsigned pole1 : 16;
unsigned pole2 : 8 и т.д.
}

Понятно что убого, на наверняка!
PETER ★★
()
Хм. Вообще-то это работать не должно, по стандарту....
aa5779
()
> по-моему, по стандарту Ц размер структуры должень быть кратен > самому крупному ее полю

А по-моему, стандарты пишутся на семантику языка, но не на конкретную реализацию.

Dimentiy ★★
()
24 июля 2003 г.
Зачем-зачем... Я из файла структуру с фиксированными полями из файла читаю - вот зачем! Структуру не я определял, и изменить ее не могу. А прочитать надо корректно и с одного раза
anonymous
()
3 сентября 2003 г.
Ответ на: комментарий от anonymous
>>Зачем-зачем... Я из файла структуру с фиксированными полями из файла читаю - вот зачем! Структуру не я определял, и изменить ее не могу. А прочитать надо корректно и с одного раза

Как я тебя понимаю. Только что у самого такая же процедура наконец заработала, такой камень с души упал!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.