2010/5/19 Ian Lance Taylor <iant@xxxxxxxxxx>: > YC Wang <wangyc0307@xxxxxxxxx> 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 > Thanks for the reply. So may I make the conclusion that on a givin processor, any version of gcc, if no bugs, is supposed to generate the same alignment? YC Wang