This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: vector of aligned elements
- From: Eus <eus at member dot fsf dot org>
- To: massimiliano cialdi <cialdi at gmail dot com>
- Cc: gcc-help at gcc dot gnu dot org
- Date: Sun, 22 Jun 2008 05:00:52 -0700 (PDT)
- Subject: Re: vector of aligned elements
- Reply-to: eus at member dot fsf dot org
Hi Ho!
--- On Fri, 6/20/08, "massimiliano cialdi" <cialdi@gmail.com> 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@gmail.com
> massimiliano.cialdi@powersoft.it
Best regards,
Eus