Есть некоторая структура, указателей не содержит. sizeof для этой структуры выдает, ну скажем, 32 байта, хотя реальный размер структуры меньше. Знаю, что в МС вижал Си есть такая штука как выравнивание, и когда этому выравниванию говоришь byte, то sizeof на мою структуру выдает верный размер. Что нужно сказать gcc (какую опцию включить или выключить), чтобы sizeof на структуру выдавал корректный размер?
В мане на gcc куча всяких алигнментов, какой нужен в моем случае, я так и не понял. Помогите плиз.
>Есть некоторая структура, указателей не содержит. sizeof для этой структуры выдает, ну
>скажем, 32 байта, хотя реальный размер структуры меньше. Знаю, что в
>МС вижал Си есть такая штука как выравнивание, и когда этому
>выравниванию говоришь byte, то sizeof на мою структуру выдает верный размер.
>Что нужно сказать gcc (какую опцию включить или выключить), чтобы sizeof
>на структуру выдавал корректный размер?
>В мане на gcc куча всяких алигнментов, какой нужен в моем случае,
>я так и не понял. Помогите плиз.http://www.opennet.me/openforum/vsluhforumID9/4714.html
и не забывайте о следующем
между членами структуры(класса) могут быть промежутки в целях выравнивания
структура(класс) может иметь скрытые поля
спасибо. будем думать.
>спасибо. будем думать.Может, поможет
#pragma pack()
>>спасибо. будем думать.
>
>Может, поможет
>#pragma pack()А вы уверены, что не лучше переписать вашу программу так
чтоб она работала с неупакованными структурами?Вы уже столкнулись с тем что такая программа не переносима
и пытаетесь эту непереносимость усугубить.Кроме того, на современном железе такая программа может
работать существенно медленней чем вариант с нормальным
выравниванием. Например на SPARC невыровненный доступ
кидает хардварное исключение, которое обработается софтварно.
А вам не кажется, что _почти месяц_ - это достаточный срок, чтобы не поднимать тему на самый верх, тем более обращаясь лично к человеку, который скорее всего уже давно забыл про свой вопрос?К вашему замечанию: бывают случаи, когда выравнивание данных использовать нельзя - например при работе с заданным форматом файла, корорый содержит невыровненные структуры...
>А вам не кажется, что _почти месяц_ - это достаточный срок, чтобы
>не поднимать тему на самый верх, тем более обращаясь лично к
>человеку, который скорее всего уже давно забыл про свой вопрос?
>
>К вашему замечанию: бывают случаи, когда выравнивание данных использовать нельзя - например
>при работе с заданным форматом файла, корорый содержит невыровненные структуры...Я обращаюсь, скорее, к тем людям которые придут читать эту нитку в будущем.
разумеется бывают случаи когда бинарный формат задан.
Тем не менее и в таких случаях можно написать переносимый код.