我想要一个变量,例如int类型(对齐为8个字节),所以我也希望对它进行8字节的指针操作。 (目标指针对齐)
我做了以下但是无法做到。
typedef int int_align_double __attribute__ ((aligned(sizeof(double))));
typedef int_align_double* pint_align_double;
pint_align_double pint;
或
typedef int_align_double* pint_align_double __attribute__ ((aligned(sizeof(double))));
那样
(int)&pint[1]-(int)&pint[0] == 8
但它等于4。 我错过了什么吗? 我也发现了这个讨论:http://gcc.gnu.org/ml/gcc/2010-01/msg00005.html 但没有提供解决方案或是否是一个错误。
答案 0 :(得分:3)
对齐说明符将影响数组的第一个元素的对齐,但它不会影响数组中元素的间距。
如果您需要控制元素的间距,请使用union
。
union spaced_int
{
int i;
double d;
};
编辑:忽略以下内容,我没有看到指针在减法之前被转换为int
。
另请注意,减去两个指针总会产生元素大小的差异,在您的示例中,答案始终为
1
。
答案 1 :(得分:3)
您应该使用属性vector_size
,它以字节为单位指定变量的向量大小,而不是aligned
。
所以试试这个:
typedef int int_align_double __attribute__ ((vector_size(sizeof(double))));