Rohit kumar Chandel
Guest
Posts: n/a

 09-26-2007
Hi All,

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

Regards
Rohit

Richard Heathfield
Guest
Posts: n/a

 09-26-2007
Rohit kumar Chandel said:

> Hi All,
>
> Please let me know how to find in a structure whether compiler has used

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

Rohit kumar Chandel
Guest
Posts: n/a

 09-26-2007
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" <(E-Mail Removed)> wrote in message
news(E-Mail Removed)...
> Rohit kumar Chandel said:
>
> > Hi All,
> >
> > Please let me know how to find in a structure whether compiler has used

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

Mark Bluemel
Guest
Posts: n/a

 09-26-2007
Rohit kumar Chandel wrote:

[Top-posting and failure to remove sigs corrected]

> "Richard Heathfield" <(E-Mail Removed)> wrote in message
> news(E-Mail Removed)...
>> Rohit kumar Chandel said:
>>
>>> Hi All,
>>>
>>> Please let me know how to find in a structure whether compiler has used

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

karthikbalaguru
Guest
Posts: n/a

 09-26-2007
On Sep 26, 10:28 am, "Rohit kumar Chandel"
<(E-Mail Removed)> wrote:
> Hi All,
>
> Please let me know how to find in a structure whether compiler has used
>
> Regards
> Rohit

alignment.

Karthik Balaguru

Guest
Posts: n/a

 09-26-2007
On Sep 26, 1:42 pm, "Rohit kumar Chandel"
<(E-Mail Removed)> 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:

rameshnaga8@gmail.com
Guest
Posts: n/a

 09-26-2007
On Sep 26, 1:42 pm, "Rohit kumar Chandel"
<(E-Mail Removed)> 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" <(E-Mail Removed)> wrote in message
>
> news(E-Mail Removed)...
>
>
>
> > 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- Hide quoted text -

>
> - Show quoted text -

Christopher Key
Guest
Posts: n/a

 09-27-2007
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

karthikbalaguru
Guest
Posts: n/a

 09-27-2007
On Sep 27, 9:46 pm, Christopher Key <(E-Mail Removed)> 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

Walter Roberson
Guest
Posts: n/a

 09-27-2007
In article <(E-Mail Removed). com>,
karthikbalaguru <(E-Mail Removed)> wrote:
>On Sep 27, 9:46 pm, Christopher Key <(E-Mail Removed)> 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.

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

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is OffTrackbacks are On Pingbacks are On Refbacks are Off Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post Kislay C Programming 15 07-13-2011 04:24 AM Stephen Mayes C Programming 5 05-31-2005 03:49 AM junky_fellow@yahoo.co.in C Programming 6 05-18-2005 08:06 AM phoenix C Programming 1 03-11-2005 04:21 AM Amarendra C Programming 13 06-22-2004 07:59 AM