This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


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

Re: sizeof different in x86 and arm.


> >-----Original Message-----
> >From: Cliff Tsai [mailto:clifftsai@minecard.com.tw]
> >Sent: 24 May 2001 11:42
> 
> 
> >    I have a simple struct as follow
> >    
> >    struct test_align
> >     {
> >     unsigned char Name[21];
> >     unsigned char Version[8];
> >     };
> >
> >    But on cygwin for x86,the sizeof(struct test_align) is 29;
> >    
> >    but on cygwin for arm,the sizeof(struct test_align) return 32
> >    
> >    WHY.
> 
>   I guess it's getting aligned.  x86 is happy to read any datatype from
> any alignment address but I believe ARM likes things to be long word
> aligned, so it puts three padding bytes after Name[] so that the first
> byte of Version[] is aligned to a multiple of 4 bytes.
> 
>   I don't think it should really need to do this for chars, but I don't
> know ARM very well so I can't explain the motivation.  However, the
> simplest way to fix it will be by using either the 'packed' or 'aligned'
> attributes - look them up in the gcc manual/info pages.

Not quite.  The padding occurs at the end of the structure in this case.

Try:

struct a{
 char a[3];
 char b[4];
};

struct a x;
main()
{
  printf("%d\n", &x.b[0] - &x.a[0]);
}

Even on the ARM this will print 3.

R.




------
Want more information?  See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com


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