我得到了这个联盟,我试图使用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中执行此操作的方法是什么。
答案 0 :(得分:2)
关键字__attribute__
可让您在定义此类型时指定struct
和union
类型的特殊属性。你需要做
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;