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