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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.