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-11 14:42 -0800 |
| Organization | None to speak of |
| Message-ID | <lnipkh3lpg.fsf@nuthaus.mib.org> (permalink) |
| References | <jekkil$u7v$1@speranza.aioe.org> |
"Mark" <mark_cruzNOTFORSPAM@hotmail.com> writes:
> #define MAX_SIZE 8
>
> enum my_enum
> {
> VAL1 = 0;
> VAL2,
> VAL3,
> VAL4,
> VAL_MAX
> };
>
> struct my_struct
> {
> enum my_enum e;
> int w[MAX_SIZE];
> };
>
> Can a layout in such structure cause alignment issues on a target platform?
> I understand it much depends on a platform, but generally C compiler is
> allowed to do padding of structures, so for example on 32 bit machine, where
> 'int' is 32 bit long:
>
> struct my_struct
> {
> int w[MAX_SIZE];
> }
>
> is aligned (as fas as I understand) so compiler probably won't be doing
> anything else with its layout, but adding 'enum my_enum' in the structure
> can poptentially get the structure un-aligned on such machine. Should I be
> doing anything special to avoid this and should I be avoiding it at all ?
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).
There can be arbitrary padding between members, or after the last one.
Some compilers have extensions that allow you to request tighter packing
(less padding) than the default. In at least one case, such an
extension can cause serious problems on some platforms; see:
http://stackoverflow.com/questions/8568432/
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51628
But if just let the compiler do its job and write portable code (and
don't make assumptions about padding), there shouldn't be any problems.
--
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