Недавно я наткнулся на следующий фрагмент, который представляет собой попытку гарантировать, что все байты i
(и не более) доступны как отдельные элементы c
:
union {
int i;
char c[sizeof(int)];
};
Это кажется хорошей идеей, но мне интересно, допускает ли стандарт случай, когда требования к выравниванию для char
более строгие, чем для int
.
В другими словами, возможно ли иметь четырехбайтовое int, которое требуется выровнять по четырехбайтовой границе с однобайтовым char
(это один байт, по определению, см. ниже) требуется быть выровненным по шестнадцатибайтовой границе?
И не повлияет ли это на использование указанного выше объединения?
Два момента, на которые следует обратить внимание.
Я говорю конкретно о том, что здесь допускает стандарт, не то, что может предоставить здравомыслящий разработчик / архитектура.
Я использую термин «байт» в смысле ISO C, где это ширина char
, а не обязательно 8 бит.