在x86中将并集与16字节边界对齐。

时间:2014-07-24 02:27:47

标签: c gcc

我得到了这个联盟,我试图使用gcc 4.8对齐到16字节边界。

typedef union {
 unsigned long long int ud[(1<<6)/8];
 long long int d[(1<<6)/8];
 unsigned int uw[(1<<6)/4];
 int w[(1<<6)/4];
 short uh[(1<<6)/2];
 unsigned short int h[(1<<6)/2];
 unsigned char ub[(1<<6)/1];
 char b[(1<<6)/1];
} vector_t;

我试过

vector_t __attribute__ ((aligned(16))) t; 

但它不起作用。堆栈中变量t的地址未与16个字节对齐。

我能够在VS 10中使用__declspec align(16)对齐它。请让我知道在gcc中执行此操作的方法是什么。

1 个答案:

答案 0 :(得分:2)

关键字__attribute__可让您在定义此类型时指定structunion类型的特殊属性。你需要做

typedef union __attribute__ ((aligned(16))) {
  unsigned long long int ud[(1<<6)/8];
  long long int d[(1<<6)/8];
  unsigned int uw[(1<<6)/4];
  int w[(1<<6)/4];
  short uh[(1<<6)/2];
  unsigned short int h[(1<<6)/2];
  unsigned char ub[(1<<6)/1];
  char b[(1<<6)/1];
} vector_t;