Structure padding

  • Thread starter Rohit kumar Chandel
  • Start date
R

Rohit kumar Chandel

Hi All,

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

Regards
Rohit
 
R

Richard Heathfield

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

Rohit kumar Chandel

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
 
M

Mark Bluemel

Rohit kumar Chandel wrote:

[Top-posting and failure to remove sigs corrected]
> 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.
 
K

karthikbalaguru

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
 
S

Spade

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
 
R

rameshnaga8

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









- Show quoted text -
 
C

Christopher Key

Mark said:
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
 
K

karthikbalaguru

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
 
W

Walter Roberson

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

Christopher Key

Walter said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,904
Latest member
HealthyVisionsCBDPrice

Latest Threads

Top