Discussion in 'C Programming' started by Rohit kumar Chandel, Sep 26, 2007.

1. ### Rohit kumar ChandelGuest

Hi All,

Please let me know how to find in a structure whether compiler has used

Regards
Rohit

Rohit kumar Chandel, Sep 26, 2007

2. ### Richard HeathfieldGuest

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@
"Usenet is a strange place" - dmr 29 July 1999

Richard Heathfield, Sep 26, 2007

3. ### Rohit kumar ChandelGuest

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" <> wrote in message
news...
> 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

Rohit kumar Chandel, Sep 26, 2007
4. ### Mark BluemelGuest

Rohit kumar Chandel wrote:

[Top-posting and failure to remove sigs corrected]

> "Richard Heathfield" <> wrote in message
> news...
>> 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.

Mark Bluemel, Sep 26, 2007
5. ### karthikbalaguruGuest

On Sep 26, 10:28 am, "Rohit kumar Chandel"
<> wrote:
> 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

karthikbalaguru, Sep 26, 2007

On Sep 26, 1:42 pm, "Rohit kumar Chandel"
<> wrote:
> 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:

Spade, Sep 26, 2007
7. ### Guest

On Sep 26, 1:42 pm, "Rohit kumar Chandel"
<> wrote:
> 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" <> wrote in message
>
> news...
>
>
>
> > 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, 2007
8. ### Christopher KeyGuest

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

Christopher Key, Sep 27, 2007
9. ### karthikbalaguruGuest

On Sep 27, 9:46 pm, Christopher Key <> wrote:
> 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
And probably, that is one of the reason, different set of libraries
are present for
different architecture w.r.t differnt compilers.

Karthik Balaguru

karthikbalaguru, Sep 27, 2007
10. ### Walter RobersonGuest

In article <>,
karthikbalaguru <> wrote:
>On Sep 27, 9:46 pm, Christopher Key <> wrote:

>> 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

Walter Roberson, Sep 27, 2007
11. ### Christopher KeyGuest

Walter Roberson wrote:
> In article <>,
> karthikbalaguru <> wrote:
>> On Sep 27, 9:46 pm, Christopher Key <> wrote:

>
>>> 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

Christopher Key, Sep 28, 2007

Joined:
Jul 13, 2011
Messages:
4