Мне сказали:
[ABI] гарантируют точное расположение структуры, смещение байтов каждого члена, какие биты используются для полей бит, где и сколько отступов есть и т.д.
Но я всегда считал, что отступы и выравнивание были неуказанными и ненадежными.
Использует ли Itanium ABI (который использует GCC) на самом деле определяет эти вещи (насколько я могу судить, it не отображается до без указания диапазонов)?
И если это так, как в него вписываются такие параметры, как __attribute__ ((packed))
? Неужели они в конечном счете нарушают ABI, изменяя выравнивание вещей?
Или, как следует из цитаты, упаковка просто неопределена между инструментальными целями, но на самом деле надежна и предсказуема при использовании определенного ABI? И снова, как что-то вроде __attribute__ ((packed))
вписывается в это?