#1
|
|||
|
|||
сборка экзотическими компиляторами
Alexey Vissarionov написал(а) к All в Jun 17 12:24:44 по местному времени:
Доброго времени суток, All! Столкнулся с необходимостью использования в ряде мест штатной для gcc конструкции "_attribute__((__packed__))" для полного отключения любого выравнивания (x8664, ага). А как это делается в других компиляторах - в частности, при сборке под форточки и яблочки? Хотелось бы что-то наподобие #ifdef _GNUC_ #define PACKED _attribute__((__packed_)) #endif чтобы в дальнейшем писать typedef struct { uint8t somebyte; uint16t some_twobyte; } PACKED something_t; и, в данном примере, получать трехбайтовую (а не четырех-, и уж тем более не шестнадцатибайтовую конструкцию). -- Alexey V. Vissarionov aka Gremlin from Kremlin gremlin ПРИ gremlin ТЧК ru; +vii-cmiii-ccxxix-lxxix-xlii ... Какая я вам мама? Я вам в отцы гожусь --- /bin/vi |
#2
|
|||
|
|||
Re: сборка экзотическими компиляторами
Vitaliy Aksyonov написал(а) к Alexey Vissarionov в Jun 17 16:00:36 по местному времени:
Привет, Alexey! 08 июн 17 12:24, Alexey Vissarionov -> All: AV> Столкнулся с необходимостью использования в ряде мест штатной для gcc AV> конструкции "_attribute__((__packed_))" для полного отключения AV> любого выравнивания (x86_64, ага). А как это делается в других AV> компиляторах - в частности, при сборке под форточки и яблочки? Эмммм. А зачем? Какая в этом реальная необходимость? С наилучшими пожеланиями, Vitaliy. ... 10.0 times 0.10 is hardly ever 1.00. --- GoldED+/LNX 1.1.5-b20160201 |
#3
|
|||
|
|||
Re: сборка экзотическими компиляторами
Georgy Meshkov написал(а) к Alexey Vissarionov в Jun 17 16:00:50 по местному времени:
Привет, Alexey! Ответ на сообщение Alexey Vissarionov (2:5020/545) к All, написанное 08 июн 17 в 12:24: AV> Столкнулся с необходимостью использования в ряде мест штатной для gcc AV> конструкции "_attribute__((__packed_))" для полного отключения AV> любого выравнивания (x86_64, ага). А как это делается в других AV> компиляторах - в частности, при сборке под форточки и яблочки? Под MSCV есть аналог declspec(align(#)). Для отключения выравнивания можно поставить 1. Также в C++11 появилось кроссплатформенное ключевое слово alignas, но стоит учесть, что оно применяется не к структуре целиком, а к каждому ее члену, т.е. надо писать что-то вроде typedef struct { uint8t somebyte; alignas(1) uint16t some_twobyte; } something_t; При этом если хочется, чтобы массив something_t был тоже выровнен на 1 байт, надо и ей самой alignas проставить. Примеры кода можно погуглить тут: https://stackoverflow.com/questions/...m-alignx-macro С уважением - Georgy --- GoldED+/W32-MINGW 1.1.5-b20120519 (Kubik 3.0) |
#4
|
|||
|
|||
сборка экчесическими компиляторами
Nickita A Startcev написал(а) к Vitaliy Aksyonov в Jun 17 00:34:36 по местному времени:
Привет, Vitaliy ! 08 Jun 17 , 16:00 Vitaliy Aksyonov писал к Alexey Vissarionov: AV>> Столкнулся с необходимостью использования в ряде мест штатной для AV>> gcc конструкции "_attribute__((__packed_))" для полного AV>> отключения любого выравнивания (x86_64, ага). А как это делается AV>> в других компиляторах - в частности, при сборке под форточки и AV>> яблочки? VA> Эмммм. А зачем? Какая в этом реальная необходимость? например, быстро читать что-то "бинарное" одним блобом, а потом радостно по граблям ходить. . С уважением, Никита. icq:240059686, lj-user:nicka_startcev ... башни-виртуалы --- GoldED+/LNX 1.1.5-b20161221 |
#5
|
|||
|
|||
Re: сборка экчесическими компиляторами
Vitaliy Aksyonov написал(а) к Nickita A Startcev в Jun 17 06:16:34 по местному времени:
Привет, Nickita! 09 июн 17 00:34, Nickita A Startcev -> Vitaliy Aksyonov: AV>>> Столкнулся с необходимостью использования в ряде мест штатной для AV>>> gcc конструкции "_attribute__((__packed_))" для полного AV>>> отключения любого выравнивания (x86_64, ага). А как это делается AV>>> в других компиляторах - в частности, при сборке под форточки и AV>>> яблочки? VA>> Эмммм. А зачем? Какая в этом реальная необходимость? NS> например, быстро читать что-то "бинарное" одним блобом, а потом NS> радостно по граблям ходить. Я так и думал. :) Да. Это просто и удобно, но нифига не переносимо... ИМХО, лучше немного напрячься, но сделать нормальную сериализацию. С наилучшими пожеланиями, Vitaliy. ... 10.0 times 0.10 is hardly ever 1.00. --- GoldED+/LNX 1.1.5-b20160201 |
#6
|
|||
|
|||
сборка экчесическими компиляторами
Nickita A Startcev написал(а) к Vitaliy Aksyonov в Jun 17 12:00:36 по местному времени:
Привет, Vitaliy ! 09 Jun 17 , 06:16 Vitaliy Aksyonov писал к Nickita A Startcev: AV>>>> Столкнулся с необходимостью использования в ряде мест штатной AV>>>> для gcc конструкции "_attribute__((__packed_))" для полного AV>>>> отключения любого выравнивания (x86_64, ага). А как это AV>>>> делается в других компиляторах - в частности, при сборке под AV>>>> форточки и яблочки? VA>>> Эмммм. А зачем? Какая в этом реальная необходимость? NS>> например, быстро читать что-то "бинарное" одним блобом, а потом NS>> радостно по граблям ходить. VA> Я так и думал. :) Да. Это просто и удобно, но нифига не переносимо... VA> ИМХО, лучше немного напрячься, но сделать нормальную сериализацию. а еще, кстати, не все архитектуры умеют невыровненное чтение данных. то есть, такая структура там может шороху навести. . С уважением, Никита. icq:240059686, lj-user:nicka_startcev ... умножаться делением --- GoldED+/LNX 1.1.5-b20161221 |