Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #15781

Re: struct alignment

From Keith Thompson <kst-u@mib.org>
Newsgroups comp.lang.c
Subject Re: struct alignment
Date 2012-01-12 02:20 -0800
Organization None to speak of
Message-ID <ln62gh2pes.fsf@nuthaus.mib.org> (permalink)
References <jekkil$u7v$1@speranza.aioe.org> <lnipkh3lpg.fsf@nuthaus.mib.org> <87hb01v279.fsf@temporary-address.org.uk> <9n7h6lFvfbU5@mid.individual.net>

Show all headers | View raw


Ian Collins <ian-news@hotmail.com> writes:
> On 01/12/12 07:56 PM, Dr Nick wrote:
>> Keith Thompson<kst-u@mib.org>  writes:
>>
>>> The compiler will (in fact, it *must*) insert whatever padding is
>>> necessary so that all the members can be accesssed correctly.  It may or
>>> may not insert more padding than it strictly needs to.
>>>
>>> The language standard guarantees that the first declared member is at
>>> offset 0, and that all other members are at increasing offsets in the
>>> order in which they're declared (the compiler can't rearrange
>>> members).
>>
>> Does any compiler let you do this?  I have done things where the order
>> of a least some elements (usually the first or the last) matters, but
>> it's rare.
>
> Let you do what?  I didn't see anything optional in Keith's reply.

Permit reordering of struct members, I presume.  Plenty of C
compilers have plenty of options that break standard compliance.

For that matter, let me back off slightly from my statement above.  A
conforming C compiler could provide an implementation-defined #pragma
directive that permits arbitrary reordering of struct members (for size
minimization, for example).  C99 6.10.6p1 says that a #pragma directive:

    causes the implementation to behave in an implementation-defined
    manner. The behavior might cause translation to fail or
    cause the translator or the resulting program to behave in a
    non-conforming manner.

So a hypothetic implementation might have:

    struct reordered {
        #pragma REORDER_STRUCT_MEMBERS
        char c0;
        char c1;
        int i;
    };

that could put i at offset 0, followed by c0 and c1.

But I've never heard of a C compiler that actually does this.

<OT>I've worked on an Ada compiler that did the equivalent of reordering
struct members, but the Ada standard doesn't require members to be
allocated in declared order.<?OT>

-- 
Keith Thompson (The_Other_Keith) kst-u@mib.org  <http://www.ghoti.net/~kst>
    Will write code for food.
"We must do something.  This is something.  Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

struct alignment "Mark" <mark_cruzNOTFORSPAM@hotmail.com> - 2012-01-11 13:31 -0500
  Re: struct alignment Kleuske <kleuske@nowhere.net> - 2012-01-11 19:23 +0000
  Re: struct alignment "Scott Fluhrer" <sfluhrer@ix.netcom.com> - 2012-01-11 16:58 -0500
  Re: struct alignment Ralf Damaschke <rwspam@gmx.de> - 2012-01-11 22:08 +0000
  Re: struct alignment Keith Thompson <kst-u@mib.org> - 2012-01-11 14:42 -0800
    Re: struct alignment Dr Nick <3-nospam@temporary-address.org.uk> - 2012-01-12 06:56 +0000
      Re: struct alignment Ian Collins <ian-news@hotmail.com> - 2012-01-12 20:42 +1300
        Re: struct alignment Keith Thompson <kst-u@mib.org> - 2012-01-12 02:20 -0800
          Re: struct alignment Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-01-18 17:03 +0000
            Re: struct alignment Kaz Kylheku <kaz@kylheku.com> - 2012-01-18 17:21 +0000
              Re: struct alignment jgk@panix.com (Joe keane) - 2012-01-19 21:42 +0000
                Re: struct alignment blp@cs.stanford.edu (Ben Pfaff) - 2012-01-19 13:57 -0800
            Re: struct alignment Stephen Sprunk <stephen@sprunk.org> - 2012-01-18 11:57 -0600
              Re: struct alignment Keith Thompson <kst-u@mib.org> - 2012-01-18 14:28 -0800
            Re: struct alignment Robert Wessel <robertwessel2@yahoo.com> - 2012-01-18 13:10 -0600
              Re: struct alignment Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-01-19 11:34 +0000
                Re: struct alignment Robert Wessel <robertwessel2@yahoo.com> - 2012-01-19 14:50 -0600
                Re: struct alignment Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-01-21 11:49 +0000

csiph-web