#include<stdio.h>
#include<conio.h>
struc MyStructA {
char a;
char b;
int c;
};
struct MyStructB {
char a;
int c;
char b;
};
int main(void) {
struct MyStructA A;
struct MyStructB B;
int sizeA = sizeof(struct MyStructA);
int sizeB = sizeof(struct MyStructB);
return 0;
}
OUTPUT IS
A = 8
B = 12
Structure padding is done to try and make sure that variables start in
memory at addresses that are a multiple of their size.
This is more efficient at hardware level (needs less cpu ticks to read
or write variables) and in some platforms this is mandatory, though
not on i386. There are CPU's that can only handle double precision
floats if they are aligned on addresses that are a multiople of 8.
In this struct:
struct MyStructA {
char a;
char b;
int c;
};
the beginning of the struct is to be assumed at 0 (I'l explain later)
a is 1 byte so it needs no padding in front of it.
the same goes for b.
but c is 4 bytes. it should be placed at an address boundary that is a
multiple of 4, so the compiler adds 2 dummy bytes in front of it.
These 2 bytes change the size from 6 to 8.
Now in this struct:
struct MyStructB {
char a;
int c;
char b;
};
a starts on 0, so no need for padding.
c needs 3 bytes in front of it, and b needs no padding.
this would bring the struct size to 9. HOWEVER, suppose that you place
2 of those structs in an array, the address rules for the second
struct in the array are the same as for the first struct.
If that second struct would start at byte 10, this would not be true
so the compiler also inserts some padding at the end of the structure
so that the next struct after it starts at a multiple of the size of
its largest member.
On Jul 29, 3:36 pm, Arun Vishwanathan <[email protected]> wrote:
> @puneet : no , in this case since 4 bytes will be used for int a and int c
> and then 1 byte for char b with 3 padded bytes next..it wud be the same here
>
> On Fri, Jul 29, 2011 at 12:11 PM, Puneet Gautam
> <[email protected]>wrote:
>
>
>
> > @nikhil: If i declare "Char b" after "int c".., would there be any
> > difference...?
>
> > On 7/28/11, Nikhil Gupta <[email protected]> wrote:
> > > Here's another example.
>
> > > struct example
> > > {
> > > int a;
> > > char b;
> > > int c;
> > > }
>
> > > Now if a variable of type example is declared then
> > > (considering base address as 2000)
> > > a gets : 2000 to 2003
> > > b gets : 2004
> > > c gets : 2005 to 2008 ? NO
>
> > > It gets 2008 to 2011. The bytes from 2005 to 2007 (3 bytes) are padded in
> > > this case.
>
> > > On Thu, Jul 28, 2011 at 12:18 AM, Aman Goyal <[email protected]>
> > wrote:
>
> > >> yes this will be the case.
>
> > >> On Wed, Jul 27, 2011 at 11:35 PM, Puneet Gautam
> > >> <[email protected]>wrote:
>
> > >>> @nikhil:So what u mean is that if i have:
>
> > >>> struct{
> > >>> int a;
> > >>> char b[5];
> > >>> };
>
> > >>> the size of this struct's node will be 12 not 9.., to make it a
> > multiple
> > >>> of 4??
>
> > >>> On 7/26/11, Nikhil Gupta <[email protected]> wrote:
> > >>> > Padding is not a topic of self referential structure.
>
> > >>> > Padding means that extra spaces of memory are used by the compiler to
> > >>> > allocate memory. This is done to have the memory address as a
> > multiple
> > >>> of
> > >>> > the size of the variable. This speeds up the processing of these
> > >>> variables
> > >>> > by the compiler.
>
> > >>> > On Tue, Jul 26, 2011 at 8:09 PM, Puneet Gautam
> > >>> > <[email protected]>wrote:
>
> > >>> >> what is meant by padding in self_referenced structure?
> > >>> >> Is it always necessary?
>
> > >>> >> --
> > >>> >> You received this message because you are subscribed to the Google
> > >>> Groups
> > >>> >> "Algorithm Geeks" group.
> > >>> >> To post to this group, send email to [email protected].
> > >>> >> To unsubscribe from this group, send email to
> > >>> >> [email protected].
> > >>> >> For more options, visit this group at
> > >>> >>http://groups.google.com/group/algogeeks?hl=en.
>
> > >>> > --
> > >>> > Nikhil Gupta
> > >>> > Senior Co-ordinator, Publicity
> > >>> > CSI, NSIT Students' Branch
> > >>> > NSIT, New Delhi, India
>
> > >>> > --
> > >>> > You received this message because you are subscribed to the Google
> > >>> Groups
> > >>> > "Algorithm Geeks" group.
> > >>> > To post to this group, send email to [email protected].
> > >>> > To unsubscribe from this group, send email to
> > >>> > [email protected].
> > >>> > For more options, visit this group at
> > >>> >http://groups.google.com/group/algogeeks?hl=en.
>
> > >>> --
> > >>> You received this message because you are subscribed to the Google
> > Groups
> > >>> "Algorithm Geeks" group.
> > >>> To post to this group, send email to [email protected].
> > >>> To unsubscribe from this group, send email to
> > >>> [email protected].
> > >>> For more options, visit this group at
> > >>>http://groups.google.com/group/algogeeks?hl=en.
>
> > >> --
> > >> You received this message because you are subscribed to the Google
> > Groups
> > >> "Algorithm Geeks" group.
> > >> To post to this group, send email to [email protected].
> > >> To unsubscribe from this group, send email to
> > >> [email protected].
> > >> For more options, visit this group at
> > >>http://groups.google.com/group/algogeeks?hl=en.
>
> > > --
> > > Nikhil Gupta
> > > Senior Co-ordinator, Publicity
> > > CSI, NSIT Students' Branch
> > > NSIT, New Delhi, India
>
> > > --
> > > You received this message because you are subscribed to the Google Groups
> > > "Algorithm Geeks" group.
> > > To post to this group, send email to [email protected].
> > > To unsubscribe from this group, send email to
> > > [email protected].
> > > For more options, visit this group at
> > >http://groups.google.com/group/algogeeks?hl=en.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Algorithm Geeks" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected].
> > For more options, visit this group at
> >http://groups.google.com/group/algogeeks?hl=en.
>
> --
> Arun Vish
> Graduate Student
> Department of Computer Science
> University of Southern California
--
You received this message because you are subscribed to the Google Groups
"Algorithm Geeks" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/algogeeks?hl=en.