Сработало бы это объединение, если бы у char были более строгие требования к выравниванию, чем у int?

Недавно я наткнулся на следующий фрагмент, который представляет собой попытку гарантировать, что все байты i (и не более) доступны как отдельные элементы c :

union {
  int i;
  char c[sizeof(int)];
};

Это кажется хорошей идеей, но мне интересно, допускает ли стандарт случай, когда требования к выравниванию для char более строгие, чем для int .

В другими словами, возможно ли иметь четырехбайтовое int, которое требуется выровнять по четырехбайтовой границе с однобайтовым char (это один байт, по определению, см. ниже) требуется быть выровненным по шестнадцатибайтовой границе?

И не повлияет ли это на использование указанного выше объединения?

Два момента, на которые следует обратить внимание.

  1. Я говорю конкретно о том, что здесь допускает стандарт, не то, что может предоставить здравомыслящий разработчик / архитектура.

  2. Я использую термин «байт» в смысле ISO C, где это ширина char , а не обязательно 8 бит.

8
задан timrau 24 August 2012 в 00:27
поделиться