From: "Amit Dang" <amit_dang@intersolutions.stpn.soft.net>
To: Steve Graegert <graegerts@gmail.com>
Cc: linux-c-programming <linux-c-programming@vger.kernel.org>
Subject: Re: Any pointer to Byte Alignment & Structure Padding?
Date: Fri, 5 Aug 2005 12:19:49 +0530 [thread overview]
Message-ID: <013901c59989$ed3d6440$9900a8c0@ispl091> (raw)
In-Reply-To: 6a00c8d50508042332245283db@mail.gmail.com
Hi Steve,
Thanks for your prompt response and the valuable information. But I
tried following on Linux 32-bit gcc 2.96
struct temp {
long long i;
char c;
} and sizeof(struct temp) gave 12 not 16.
Regards,
Amit Dang
----- Original Message -----
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>
Sent: Friday, August 05, 2005 12:02 PM
Subject: Re: Any pointer to Byte Alignment & Structure Padding?
> 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
next prev parent reply other threads:[~2005-08-05 6:49 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
2005-08-05 6:49 ` Amit Dang [this message]
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='013901c59989$ed3d6440$9900a8c0@ispl091' \
--to=amit_dang@intersolutions.stpn.soft.net \
--cc=graegerts@gmail.com \
--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.