This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Arrays and Alignment

"Michael N. Moran" <> writes:

> I am declaring an array of an aligned type. However
> it would appear that when used in an array, the alignment
> is not maintained as I would expect. Here's a test-case.
> #include <stdio.h>
> typedef unsigned char achar __attribute__ ((__aligned__(32)));
> achar           a[2];
> int main(int argc,char* argv[]){
>     printf("__alignof__(achar):%u\n",__alignof__(achar));
>     printf("__alignof__(a[1]):%u\n",__alignof__(a[1]));
>     printf("&a: %8.8lX\n",(unsigned long)&a);
>     printf("sizeof(a):%u\n",sizeof(a));
>     printf("sizeof(a[0]):%u\n",sizeof(a[0]));
>     printf("&a[0]: %8.8lX\n",(unsigned long)&a[0]);
>     printf("&a[1]: %8.8lX\n",(unsigned long)&a[1]);
>     return 0;
>     }
> % gcc -o main main.c ; main
> __alignof__(achar):32
> __alignof__(a[1]):1
> &a: 08049740
> sizeof(a):32
> sizeof(a[0]):1
> &a[0]: 08049740
> &a[1]: 08049741         <<<<<<<<<<<< I expected this to be 08049760

You can't have both.  That would require to put padding between array
elements, which is not allowed (unlike structure members).


Andreas Schwab, SuSE Labs,
SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]