Hi Ho! --- On Fri, 6/20/08, "massimiliano cialdi" <cialdi@xxxxxxxxx> wrote: > is possoble to declare an array of element aligned? Yes, it is. > for example is possible to declare an array of long aligned to 8 byte, > so as if &array[0] is x then &array[1] is x+MAX(8,sizeof(long)) Yes, it is. > I tried the following > > #include <stdio.h> > > typedef long aligned_long __attribute__ ((aligned (32))); > > aligned_long a[4]; > > int main(void) > { > printf("test %d\n", sizeof(a)); > return 0; > } > > compiled with the following command line > gcc -Wall main.c -o main > (gcc 4.2.1) > > I obtain this error > error: alignment of array elements is greater than element size > > > So is it impossible or is there another way? The following one should work: typedef union { long value; char alignment [32]; } aligned_long; > this is not the real problem, I simply try to answer to the following question: > can I assume that (&array[1]-&array[0])==sizeof(array[0])? You mean: ((int) &array[1] - (int) &array[0]) == sizeof (array[0])? It is because &array[1]-&array[0] will always give you 1 since it is a pointer arithmetic operation. If so, yes, I think you can assume that because sizeof() also takes into account the alignment, for example, struct x { char a; int b; }; sizeof(x) == 8 struct x array[2]; sizeof(array) == 16. So, ((int) &array[1] - (int) &array[0]) == sizeof (array[0]). > thanks Your welcome. > -- > Et nunc, auxilium solis, vincam! > Oppugnatio solaris! > VIS! > > Massimiliano Cialdi > cialdi@xxxxxxxxx > massimiliano.cialdi@xxxxxxxxxxxx Best regards, Eus