Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| 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> |
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
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