This is the mail archive of the gcc-help@gcc.gnu.org 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: about alignment of structure


YC Wang <wangyc0307@gmail.com> writes:

> When gcc processes a strucure declaration, what rules it will use? As
> far as I know, gcc is supposed to conform to the platform ABI. For
> example, below is extracted from the SysV i386 ABI:
>
>  - An entire structure or union object is aligned on the same boundary as
>  its most strictly aligned member.
>
>  - Each member is assigned to the lowest available offset with the
>  appropriate alignment. This may require internal padding, depending on the
>  previous member.
>
>  - A structure's size is increased, if necessary, to make it a multiple
>  of the alignment. This may require tail padding, depending on the last
>  member.
>
> So, should gcc (whatever versions)  always comform to these rules
> (assume we don't  specify special attributes or options)?

All versions of gcc that use the 386 ELF ABI will follow those rules.

> I ask this
> question because I just read the paper "stable_api_nonsense" by Greg
> KH from Linux kernel Documentation, and begin with line 54 the paper
> says "Depending on the version of the C compiler you use, different
> kernel data structures will contain different alignment of
> structures".

You will different alignment on different processors, but I'm not
aware of any case where you will different alignment for the same
processor from different versions of gcc.  Of course there can be
bugs, but bugs in this area are rare.

Ian


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