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


Groups > comp.lang.c > #4465

Re: size_t in a struct

From Keith Thompson <kst-u@mib.org>
Newsgroups comp.lang.c
Subject Re: size_t in a struct
Date 2011-05-20 15:39 -0700
Organization None to speak of
Message-ID <lntycpyp2p.fsf@nuthaus.mib.org> (permalink)
References <ir6bhi$fcu$1@speranza.aioe.org> <ir6d98$e50$1@dont-email.me> <ir6mjl$d08$1@speranza.aioe.org>

Show all headers | View raw


Edward Rutherford <edward.p.rutherford79@REMOVETHIS.gmail.com> writes:
> Shao Miller wrote:
>> On 5/20/2011 14:22, Edward Rutherford wrote:
>>> To avoid padding in structures, where is the best place to put size_t
>>> variables?
>>>
>>> According the faq question 2.12 (http://c-faq.com/struct/padding.html),
>>> it says:
>>>
>>> "If you're worried about wasted space, you can minimize the effects of
>>> padding by ordering the members of a structure based on their base
>>> types, from largest to smallest."
>>>
>>>
>> And the sizes of those types can vary per implementation, too, if I
>> recall correctly.
>> 
>>> So if I have the following:
>>>
>>> typedef struct __buffer_t {
>>>
>>>      char *buffer;
>>>      size_t size;
>>>
>>> } Buffer_t;
>>>
>>> I should have mimized padding since size_t is an unsigned long.
>> 
>> It is?  How did you determine that?
>> 
>>> However, will size_t ever become an unsigned long long?
>> 
>> It might, as far as I know.
>
> So standard-wise, how do I handle size_t in structures to minmize
> padding?  Should size_t all ways follow after pointers in structures?
> And if I have integers in the structure, where should I put size_t?

Standard-wise, you don't.  The standard requires at least enough padding
to satisfy alignment requirements, but it says very little about what
those requirements are.

If you really absolutely need to avoid any possibility of padding,
declare an array of unsigned char and use memcpy() to copy the
individual members in an out.

> <OT>
> According my style(9) man page, the suggestion is to:
>
> "When declaring variables in structures, declare them sorted by use,
> then
>   by size (largest to smallest), then by alphabetical order. "
>
> This would lead to padding, right?  But I would have to assume a size
> for size_t to follow that style.
> </OT>

It might, though I've never followed that kind of rule myself.

Again, *why* are you so concerned about minimizing padding?  What bad
thing would happen if there were a little padding between members in
your structs?

If you'll tell us what your actual goal is, we'll be better able to help
you.

-- 
Keith Thompson (The_Other_Keith) kst-u@mib.org  <http://www.ghoti.net/~kst>
Nokia
"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

size_t in a struct Edward Rutherford <edward.p.rutherford79@REMOVETHIS.gmail.com> - 2011-05-20 18:22 +0000
  Re: size_t in a struct Shao Miller <sha0.miller@gmail.com> - 2011-05-20 14:52 -0400
    Re: size_t in a struct Edward Rutherford <edward.p.rutherford79@REMOVETHIS.gmail.com> - 2011-05-20 21:31 +0000
      Re: size_t in a struct Ian Collins <ian-news@hotmail.com> - 2011-05-21 09:51 +1200
        Re: size_t in a struct Phil Carmody <thefatphil_demunged@yahoo.co.uk> - 2011-05-24 21:34 +0300
          Re: size_t in a struct Ian Collins <ian-news@hotmail.com> - 2011-05-25 07:54 +1200
      Re: size_t in a struct "[the China Blue] Drill Baby Drill" <chine.bleu@yahoo.com> - 2011-05-20 15:06 -0700
        Re: size_t in a struct Angel <angel+news@spamcop.net> - 2011-05-20 22:51 +0000
      Re: size_t in a struct Keith Thompson <kst-u@mib.org> - 2011-05-20 15:39 -0700
        Re: size_t in a struct Edward Rutherford <edward.p.rutherford79@REMOVETHIS.gmail.com> - 2011-05-21 18:00 +0000
          Re: size_t in a struct Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-05-21 14:12 -0600
          Re: size_t in a struct Keith Thompson <kst-u@mib.org> - 2011-05-21 16:31 -0700
            Re: size_t in a struct Dr Nick <3-nospam@temporary-address.org.uk> - 2011-05-22 10:08 +0100
              Re: size_t in a struct Shao Miller <sha0.miller@gmail.com> - 2011-05-22 13:24 -0500
                Re: size_t in a struct Ben Pfaff <blp@cs.stanford.edu> - 2011-05-22 10:37 -0700
                Re: size_t in a struct Uncle Steve <stevet810@gmail.com> - 2011-05-22 14:18 -0400
                Re: size_t in a struct Keith Thompson <kst-u@mib.org> - 2011-05-22 12:17 -0700
                Re: size_t in a struct David Thompson <dave.thompson2@verizon.net> - 2011-06-01 16:33 -0400
                Re: size_t in a struct Shao Miller <sha0.miller@gmail.com> - 2011-05-23 02:05 -0500
                Re: size_t in a struct Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-05-23 11:21 +0100
                Re: size_t in a struct Shao Miller <sha0.miller@gmail.com> - 2011-05-23 19:40 -0500
                Re: size_t in a struct Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-05-24 01:25 +0100
                Re: size_t in a struct Shao Miller <sha0.miller@gmail.com> - 2011-05-23 20:43 -0500
          Re: size_t in a struct gordonb.d6jvy@burditt.org (Gordon Burditt) - 2011-05-22 17:48 -0500
      Re: size_t in a struct Jorgen Grahn <grahn+nntp@snipabacken.se> - 2011-05-21 15:43 +0000
  Re: size_t in a struct Keith Thompson <kst-u@mib.org> - 2011-05-20 11:59 -0700
  Re: size_t in a struct Nobody <nobody@nowhere.com> - 2011-05-20 22:24 +0100

csiph-web