-
- Если арм, то можно нужное поле структуры объединить с int через union. Тогда должен бы выравнять как int. SciFi(34 знак., 25.06.2013 18:00)
- Ну тогда всё очень непонятно. Не выравнивает по-умолчанию? - amx(25.06.2013 17:57, ссылка)
- по-умолчанию выравнивает, чуть выше писал что 4х - для примера - Молодой коллега(25.06.2013 18:09)
- Тогда просто грохнуть гнутый атрибут, и ничего делать не нужно? - Vladimir Ljaschko(25.06.2013 18:24)
- Может это я чего-то туплю, но что делать если мне надо выровнять поле на границу восьми байт? - Молодой коллега(25.06.2013 18:29)
- А нафиг? Лучше расскажите про задачу, что-нибудь придумаем. SciFi(65 знак., 25.06.2013 19:20)
- Задача
содратьпортировать линуксовый ehci'овый USB-host. Там где выровнять на 4 байта UNION вполне себе нормальный вариант, но по-моему там(в исходниках) есть и на больше, сейчас посмотреть не могу. - Молодой коллега(25.06.2013 21:00)- Может чего то не понимаю.., но что мешает использовать union для выравнивания на более чем 4 байта ? - Юрий_СВ(25.06.2013 21:12)
- Покажите как? - Молодой коллега(25.06.2013 21:17)
- union asd{u8_t b[8]; u16_t c;}; - Юрий_СВ(25.06.2013 21:20 - 21:23)
- Это было бы смешно, если бы не было так грустно :-) - SciFi(25.06.2013 21:24)
- поясните, если не трудно - Юрий_СВ(25.06.2013 21:28)
- Ну, просто не будет работать. - SciFi(25.06.2013 21:29)
- почему ? - Юрий_СВ(25.06.2013 21:30)
- почему оно должно работать? это вы объясните. - SciFi(25.06.2013 21:33)
- думал, раз разговор о выравнивании полей - значит структура уже выровнена - не заглянул в средину верхнего сообщения - Юрий_СВ(25.06.2013 22:27)
- "u8_t b[8]" не будет выровнено на границе 8 байт, я кагбэ об этом. - SciFi(25.06.2013 22:41)
- думал, раз разговор о выравнивании полей - значит структура уже выровнена - не заглянул в средину верхнего сообщения - Юрий_СВ(25.06.2013 22:27)
- почему оно должно работать? это вы объясните. - SciFi(25.06.2013 21:33)
- почему ? - Юрий_СВ(25.06.2013 21:30)
- Ну, просто не будет работать. - SciFi(25.06.2013 21:29)
- поясните, если не трудно - Юрий_СВ(25.06.2013 21:28)
- Это было бы смешно, если бы не было так грустно :-) - SciFi(25.06.2013 21:24)
- union asd{u8_t b[8]; u16_t c;}; - Юрий_СВ(25.06.2013 21:20 - 21:23)
- Покажите как? - Молодой коллега(25.06.2013 21:17)
- Я боюсь, там очень x86-специфичное всё. И порядок байтов, и выравнивания, и размеры других типов данных -- что-нибудь да не совпадёт. Кроме того, ньюансы связанные с GCC. Тогда уж, может, сразу взять GCC? Или, как вариант, взять упакованную fk0(97 знак., 25.06.2013 21:07)
- Я "дербаню" сборку которая работала на ARM9, наиболее близкое что смог найти. C gcc дел не имел, разбираться не хочу. - Молодой коллега(25.06.2013 21:23)
- А зря. Фигли там разбираться. Компилятор - он и в Африке компилятор. SciFi(25 знак., 25.06.2013 21:26 - 21:29)
- +много. Тупо напихать в структуру байтов. Потому что подозреваю, что это будет наименьшая из проблем. - SciFi(25.06.2013 21:19)
- Только эта, не факт, что целевая платформа с неправильно выровненными данными вообще заработает. - fk0(25.06.2013 21:07)
- Я "дербаню" сборку которая работала на ARM9, наиболее близкое что смог найти. C gcc дел не имел, разбираться не хочу. - Молодой коллега(25.06.2013 21:23)
- Может чего то не понимаю.., но что мешает использовать union для выравнивания на более чем 4 байта ? - Юрий_СВ(25.06.2013 21:12)
- Задача
- Може и я туплю, но : Vladimir Ljaschko(558 знак., 25.06.2013 18:44)
- А нафиг? Лучше расскажите про задачу, что-нибудь придумаем. SciFi(65 знак., 25.06.2013 19:20)
- Может это я чего-то туплю, но что делать если мне надо выровнять поле на границу восьми байт? - Молодой коллега(25.06.2013 18:29)
- Тогда просто грохнуть гнутый атрибут, и ничего делать не нужно? - Vladimir Ljaschko(25.06.2013 18:24)
- по-умолчанию выравнивает, чуть выше писал что 4х - для примера - Молодой коллега(25.06.2013 18:09)