By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,039 Members | 1,035 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,039 IT Pros & Developers. It's quick & easy.

Structure padding

P: n/a
Hi All,

Please let me know how to find in a structure whether compiler has used
padding or not.

Regards
Rohit
Sep 26 '07 #1
Share this Question
Share on Google+
10 Replies


P: n/a
Rohit kumar Chandel said:
Hi All,

Please let me know how to find in a structure whether compiler has used
padding or not.
If you add together the sizes of all the components of a struct, and
subtract it from the size of the struct, the remainder is the number of
bytes of padding. If this value is 0, there is no padding.

Apply recursively, depth-first, if the structure contains any structures
(there's no rule that says an implementation's padding strategy must be
all or nothing).

--
Richard Heathfield <http://www.cpax.org.uk>
Email: -http://www. +rjh@
Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
"Usenet is a strange place" - dmr 29 July 1999
Sep 26 '07 #2

P: n/a
Thanks for the info.
Another question. I have read somewhere concept of byte boundaries in
context of Structure padding. But could get nothing out of it since no
explaination was provided as what is byte boundary.

Can anybody comment what 1byte, 2byte, 4 byte boundary mean in this context.
Suppose my structure starts at address 1000 and occupies 13 bytes. Then I
want to know in this example what are 1 byte, 2byte, 4 byte and 16 byte
boundaries.

Thanks and Regards
Rohit

"Richard Heathfield" <rj*@see.sig.invalidwrote in message
news:Dp******************************@bt.com...
Rohit kumar Chandel said:
Hi All,

Please let me know how to find in a structure whether compiler has used
padding or not.

If you add together the sizes of all the components of a struct, and
subtract it from the size of the struct, the remainder is the number of
bytes of padding. If this value is 0, there is no padding.

Apply recursively, depth-first, if the structure contains any structures
(there's no rule that says an implementation's padding strategy must be
all or nothing).

--
Richard Heathfield <http://www.cpax.org.uk>
Email: -http://www. +rjh@
Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
"Usenet is a strange place" - dmr 29 July 1999

Sep 26 '07 #3

P: n/a
Rohit kumar Chandel wrote:

[Top-posting and failure to remove sigs corrected]
"Richard Heathfield" <rj*@see.sig.invalidwrote in message
news:Dp******************************@bt.com...
>Rohit kumar Chandel said:
>>Hi All,

Please let me know how to find in a structure whether compiler has used
padding or not.
If you add together the sizes of all the components of a struct, and
subtract it from the size of the struct, the remainder is the number of
bytes of padding. If this value is 0, there is no padding.

Apply recursively, depth-first, if the structure contains any structures
(there's no rule that says an implementation's padding strategy must be
all or nothing).
Thanks for the info.
Another question. I have read somewhere concept of byte boundaries in
context of Structure padding. But could get nothing out of it since no
explaination was provided as what is byte boundary.
Although a system may allow byte-level addressing, it's unlikely that
data types can start at arbitrary byte addresses. So data types have to
be aligned at addresses which meet specific requirements.

For example, on the PowerPC systems I've worked on, 32-bit data items
(e.g. ints on that system) had to be at addresses which were multiples
of 4-bytes while 64-bit data items (longs, doubles) had to be at 8-byte
boundaries... As a structure could start with any data type, structures
were also 8-byte aligned, as was memory returned by malloc().

In this model a structure of the form :-

struct fred {
char a;
long b;
};

would have 7-bytes of padding between a and b.
Sep 26 '07 #4

P: n/a
On Sep 26, 10:28 am, "Rohit kumar Chandel"
<rohitkumar.chan...@in.bosch.comwrote:
Hi All,

Please let me know how to find in a structure whether compiler has used
padding or not.

Regards
Rohit
Try 'offsetof'. It will help you in understanding the padding ,
alignment.

Karthik Balaguru

Sep 26 '07 #5

P: n/a
On Sep 26, 1:42 pm, "Rohit kumar Chandel"
<rohitkumar.chan...@in.bosch.comwrote:
Thanks for the info.
Another question. I have read somewhere concept of byte boundaries in
context of Structure padding. But could get nothing out of it since no
explaination was provided as what is byte boundary.

Can anybody comment what 1byte, 2byte, 4 byte boundary mean in this context.
Suppose my structure starts at address 1000 and occupies 13 bytes. Then I
want to know in this example what are 1 byte, 2byte, 4 byte and 16 byte
boundaries.
You can find an explanation for byte boundaries here:
http://prokutfaq.byethost15.com/StructurePadding

Sep 26 '07 #6

P: n/a
On Sep 26, 1:42 pm, "Rohit kumar Chandel"
<rohitkumar.chan...@in.bosch.comwrote:
Thanks for the info.
Another question. I have read somewhere concept of byte boundaries in
context of Structure padding. But could get nothing out of it since no
explaination was provided as what is byte boundary.

Can anybody comment what 1byte, 2byte, 4 byte boundary mean in this context.
Suppose my structure starts at address 1000 and occupies 13 bytes. Then I
want to know in this example what are 1 byte, 2byte, 4 byte and 16 byte
boundaries.

Thanks and Regards
Rohit

"Richard Heathfield" <r...@see.sig.invalidwrote in message

news:Dp******************************@bt.com...
Rohit kumar Chandel said:
Hi All,
Please let me know how to find in a structure whether compiler has used
padding or not.
If you add together the sizes of all the components of a struct, and
subtract it from the size of the struct, the remainder is the number of
bytes of padding. If this value is 0, there is no padding.
Apply recursively, depth-first, if the structure contains any structures
(there's no rule that says an implementation's padding strategy must be
all or nothing).
--
Richard Heathfield <http://www.cpax.org.uk>
Email: -http://www. +rjh@
Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
"Usenet is a strange place" - dmr 29 July 1999- Hide quoted text -

- Show quoted text -

Sep 26 '07 #7

P: n/a
Mark Bluemel wrote:
For example, on the PowerPC systems I've worked on, 32-bit data items
(e.g. ints on that system) had to be at addresses which were multiples
of 4-bytes while 64-bit data items (longs, doubles) had to be at 8-byte
boundaries... As a structure could start with any data type, structures
were also 8-byte aligned, as was memory returned by malloc().

In this model a structure of the form :-

struct fred {
char a;
long b;
};

would have 7-bytes of padding between a and b.
Does padding tend to vary between different compilers on the same platform?

I'm thinking of the situation where struct fred is part of the public
API for some library. If clients of the library want to be able to
access the members of fred, they need to be sure that they've been
compiled using the same padding as the library.

I know that in general opaque structures are a good idea, but there are
exceptions where having access functions for everything really isn't
desirable.

Regards,

Chris
Sep 27 '07 #8

P: n/a
On Sep 27, 9:46 pm, Christopher Key <cj...@cam.ac.ukwrote:
Mark Bluemel wrote:
For example, on the PowerPC systems I've worked on, 32-bit data items
(e.g. ints on that system) had to be at addresses which were multiples
of 4-bytes while 64-bit data items (longs, doubles) had to be at 8-byte
boundaries... As a structure could start with any data type, structures
were also 8-byte aligned, as was memory returned by malloc().
In this model a structure of the form :-
struct fred {
char a;
long b;
};
would have 7-bytes of padding between a and b.

Does padding tend to vary between different compilers on the same platform?
Padding is done by compiler based on the Boundary alignment of the
processor.
Padding contain some undefined data. The compiler is never going to
do
anything with them and so they could be anything(Padded data will not
be sequence of
zeros or one)
>
I'm thinking of the situation where struct fred is part of the public
API for some library. If clients of the library want to be able to
access the members of fred, they need to be sure that they've been
compiled using the same padding as the library.
Obviously, some libraries will throw the respective exceptions or
carry a note about this.
And probably, that is one of the reason, different set of libraries
are present for
different architecture w.r.t differnt compilers. :):)

Karthik Balaguru

Sep 27 '07 #9

P: n/a
In article <11**********************@g4g2000hsf.googlegroups. com>,
karthikbalaguru <ka***************@gmail.comwrote:
>On Sep 27, 9:46 pm, Christopher Key <cj...@cam.ac.ukwrote:
>Does padding tend to vary between different compilers on the same platform?
>Padding is done by compiler based on the Boundary alignment of the
processor.
Not necessarily. Padding can be done for efficiency instead of
based upon instruction set necessity. Compiler optimizations might
even pad so as to avoid bad cache behaviour based upon the way
the program uses the structure.
--
Prototypes are supertypes of their clones. -- maplesoft
Sep 27 '07 #10

P: n/a
Walter Roberson wrote:
In article <11**********************@g4g2000hsf.googlegroups. com>,
karthikbalaguru <ka***************@gmail.comwrote:
>On Sep 27, 9:46 pm, Christopher Key <cj...@cam.ac.ukwrote:
>>Does padding tend to vary between different compilers on the same platform?
>Padding is done by compiler based on the Boundary alignment of the
processor.

Not necessarily. Padding can be done for efficiency instead of
based upon instruction set necessity. Compiler optimizations might
even pad so as to avoid bad cache behaviour based upon the way
the program uses the structure.
Thanks guys. Hopefully all code using the API will typically be
compiled using the same compiler as was used for the API, but I'll
remember this as a potential source of problems.

Chris
Sep 28 '07 #11

This discussion thread is closed

Replies have been disabled for this discussion.