All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steve Graegert <graegerts@gmail.com>
To: Amit Dang <amit_dang@intersolutions.stpn.soft.net>
Cc: linux-c-programming <linux-c-programming@vger.kernel.org>
Subject: Re: Any pointer to Byte Alignment & Structure Padding?
Date: Fri, 5 Aug 2005 08:32:02 +0200	[thread overview]
Message-ID: <6a00c8d50508042332245283db@mail.gmail.com> (raw)
In-Reply-To: <00c001c59974$32b0c9b0$9900a8c0@ispl091>

On 8/5/05, Amit Dang <amit_dang@intersolutions.stpn.soft.net> wrote:
> Hi Vadiraj,
> The statement " Take it for granted you get either 4 byte or 8 byte boundary
> but never 1 byte." you made is it generic or just valid for the structure in
> question? If its generic then I have a question.
> Why the size of
> struct {
>    char i;
>    char j;
>    char k;
> } is 3 ? (gcc 2.96 on Linux 32-bit machine).

Because the alignment requirement for this structure is 1, it is
byte-aligned.  A structure is padded and properly aligned only if one
of its members requires more than a single byte of storage. Take a
look at this:

	struct a {
		char  a;
		int    :0;
		char  b;
	};

its size is 3, since it's byte-aligned also.  This rule does not hold
for the structure

	struct b {
		char  a;
		short s;
	}

since one member, here s, requires more than one byte of storage and
must be aligned to a 4 byte boundary (4 is the smallest possible
multiple of 2 larger than 3) resulting in sizeof(b) == 4.

> What I have understood atleast for gcc compiler Linux 32-bit machine is
> that, Maximum byte boundary is 4.

True for int, but double and long long will always be 8 byte aligned by default.

> equal to minimum of (4 or field with maximum size (within the structure)).
> i.e. for the above example maximum field size if 1 and min (4, 1) = 1, so
> structure is aligned to 1 byte.
> If I have following structure
> struct {
>    short i;
>    char j;
> } its size will be 4.

True.
 
> if i modify the above struct to
> struct {
>    int i;
>    char j;
> } its size will be 8.

Yes, exactly.

> Now modifying int to long long in the above structure will have a size of
> 12 not 16 because byte alignment min (4, 8) = 4.

No, it will have a size of 16 because the alignment requirement for
this structure is a multiple of its largest member.  long long and
double is always double word aligned.

Regards

	\Steve

  reply	other threads:[~2005-08-05  6:32 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-08-01 11:43 Any pointer to Byte Alignment & Structure Padding? Amit Dang
     [not found] ` <6eee1c40508010514517b5b90@mail.gmail.com>
2005-08-01 12:16   ` Vadiraj
     [not found]     ` <17134.43470.280296.644313@cerise.gclements.plus.com>
2005-08-02 11:21       ` Vadiraj
2005-08-02 11:40         ` Amit Dang
2005-08-02 16:39           ` Glynn Clements
2005-08-02 17:12             ` Vadiraj
2005-08-03  4:04               ` Amit Dang
     [not found]     ` <673ac06405080402432d0feda3@mail.gmail.com>
2005-08-04 15:23       ` Vadiraj
2005-08-04 16:28         ` Steve Graegert
2005-08-05 16:51           ` Vadiraj
2005-08-05  4:14         ` Amit Dang
2005-08-05  6:32           ` Steve Graegert [this message]
2005-08-05  6:49             ` Amit Dang
2005-08-05  7:09               ` Steve Graegert
2005-08-05 11:19                 ` Glynn Clements
2005-08-05 10:15                   ` Steve Graegert
2005-08-05 10:53                     ` Amit Dang
2005-08-05 11:13                       ` Steve Graegert
2005-08-05 11:28                         ` Amit Dang
2005-08-05 11:37                           ` Steve Graegert
2005-08-05 12:59                     ` Glynn Clements
2005-08-05 11:31                       ` Steve Graegert
2005-08-01 12:27   ` Amit Dang
2005-08-01 14:11     ` wwp
     [not found]       ` <003b01c59715$d3ffef00$9900a8c0@ispl091>
     [not found]         ` <6a00c8d5050801234267dd0f7f@mail.gmail.com>
     [not found]           ` <01dd01c5972f$5c3b62a0$9900a8c0@ispl091>
     [not found]             ` <17135.20687.821822.269575@cerise.gclements.plus.com>
     [not found]               ` <02c401c59745$2aaa0410$9900a8c0@ispl091>
2005-08-02 11:08                 ` Progga
2005-08-02 11:34                   ` Amit Dang
2005-08-02 11:32                 ` Steve Graegert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6a00c8d50508042332245283db@mail.gmail.com \
    --to=graegerts@gmail.com \
    --cc=amit_dang@intersolutions.stpn.soft.net \
    --cc=linux-c-programming@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.