0

我对联合的内存地址调整有点困惑。

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 位

注意:如果您有更好的意见,请随时改进该问题

4

1 回答 1

1

我对你的实际问题有点困惑:-)

但是,如果您要询问该联合将如何保持一致,则联合必须在此处遵循两个相关规则。

  1. 所有项目都必须从并集的开头开始。
  2. 联合作为一个整体必须与其最严格的组件对齐。

换句话说,就int对齐而言,这很可能是这里的驱动力

如果单个的对齐方式是 1,则的值在x这里无关紧要char。需要对齐的不是整个数组,而是它的每个元素。

于 2011-11-02T07:56:47.493 回答