[IRCServices Coding] GCC3
Finny Merrill
griever at t2n.org
Tue Feb 26 12:01:21 PST 2002
On Tue, 26 Feb 2002, Trevor Talbot wrote:
> On Monday, February 25, 2002, at 09:48 PM, Andrew Church wrote:
>
> >> Reordering is not permitted by the ANSI/ISO C standards.
> >
> > That's what I thought, but a whole bunch of people seemed to think
> > GCC
> > 3.0 was doing just that.
>
> It occurs to me that this has been talked about as a somewhat-useful
> optimization. The idea is to reorder struct members for optimal padding.
> But even if gcc did adopt this as an extension (I don't know if it does
> or
> not), it would have to be disabled by default, as several things (such as
> ANSI offsetof()) would break.
>
> > Again, that's what I thought--compilers aren't supposed to pad more
> > than the largest type in the structure, and between structure members
> > only
> > enough to align the next member to a multiple of its size. I'm pretty
> > sure
> > this is defined somewhere, and if not then it should be (see below).
> >
> >> Partly for this reason, mapping structs onto arbitrary data in
> >> memory results in undefined behavior.
> >
> > It shouldn't, and if it did things would break all over the place.
> > Suppose you have two compilers, one of which is used to compile a
> > program,
> > and the other of which is used to compile a library used by the program.
> > Now suppose the program passes a pointer to a structure (say, a FILE *)
> > to
> > the library. If the two compilers use different algorithms to pad
> > structure members, guess what happens? Boom.
>
> Actually, I was referring to things such as:
>
> struct tag {
> char type;
> uint_32 value;
> } *s;
>
> char map[32];
should be unsigned char.
>
> /* load map with some data */
>
> s = (struct tag *)map;
>
> But your point about compilers is a valid one; I don't know about
> POSIX (as someone else commented), but in general compilers adopt
> the same alignment scheme for a particular architecture. After all,
> the architecture is what requires certain alignments anyway :)
>
> -- Quension
>
> ------------------------------------------------------------------
> To unsubscribe or change your subscription options, visit:
> http://www.ircservices.za.net/mailman/listinfo/ircservices-coding
>