Выравнивание адресов для Союза - PullRequest
0 голосов
/ 02 ноября 2011

Я немного озадачен изменением адреса памяти для объединения.

typedef union { 
               char state[x];
               char encode[4];
               int index;
} Location;

Мы используем несколько правил выравнивания при написании кода, например:

int      4 bit alignment
double   4 bit for linux
char *   4 bit for linux

"как этот союз будет выровнен" Для этих условий; Если

   x < 4      ?
   x = 4      ?
   x > 4      ?

платформа Linux сборка x86 64 бит

ПРИМЕЧАНИЕ: если у вас есть лучшее мнение, не стесняйтесь, когда решите этот вопрос

1 Ответ

1 голос
/ 02 ноября 2011

Я немного озадачен тем, каков ваш настоящий вопрос: -)

Но, если вы спрашиваете, как будет объединен этот союз, профсоюз должен следовать здесь двум соответствующим правилам.

  1. Все элементы должны начинаться с начала объединения.
  2. Объединение в целом должно иметь выравнивание его самого строгого компонента.

В другихслова, вполне вероятно, что int является движущей силой здесь с точки зрения выравнивания

Значение x здесь не имеет значения, если выравнивание одного char равно единице.Не весь массив должен быть выровнен, просто каждый его элемент.

...