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


Groups > comp.lang.c > #15770

Re: struct alignment

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>

Show all headers | View raw


"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


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