Probably it might help to lookup 'cacheline' to further understand why
a processor addressing system prefers aligned addresses. Another
primary reason that padding of structures is done is to make sure that
a structure looks same between machines belonging to different
architecture - for example, sending packets over network from one
machine to another. One machine might be 32 bit and long would be 32,
but same long would be 64bit on a Xeon machine. A non padded structure
would have different element addressing on both machines.

-
Shreyansh

On Jul 30, 11:21 am, Nikhil Gupta <nikhilgupta2...@gmail.com> wrote:
> If you have studied Computer system architecture at any point of time, you
> can understand that everything inside a machine occurs because of the clock
> cycles inside the CPU. Now I'm not sure about this, but to reach a specific
> memory location, if the address is a multiple of 4 or 8, it facilitates the
> address bus in locating the variable.
>
> On Sat, Jul 30, 2011 at 8:41 PM, tech rascal <techrascal...@gmail.com>wrote:
>
>
>
> > This is more efficient at hardware level (needs less cpu ticks to read or
> > write variable).
>
> > I am asking ..how it needs less CPU ticks for accessing the variable??
>
> > On Sat, Jul 30, 2011 at 8:33 PM, Nikhil Gupta 
> > <nikhilgupta2...@gmail.com>wrote:
>
> >> As explained by someone above : 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.
>
> >> On Sat, Jul 30, 2011 at 8:23 PM, tech rascal 
> >> <techrascal...@gmail.com>wrote:
>
> >>> @ Nikhil: please explain y these memory spaces r left empty??? or hw
> >>> structure padding increase execution speed?
>
> >>> On Sat, Jul 30, 2011 at 8:05 PM, Nikhil Gupta <nikhilgupta2...@gmail.com
> >>> > wrote:
>
> >>>> They remain empty. You cannot use them. The purpose for which they are
> >>>> left will be defeated then.
>
> >>>> On Sat, Jul 30, 2011 at 1:03 PM, Puneet Gautam <puneet.nsi...@gmail.com
> >>>> > wrote:
>
> >>>>> @everyone: What happens to those padded byte addresses.. do they
> >>>>> remain empty or what..?
> >>>>> Can we utilize those padded bytes in any way ..?
>
> >>>>> On 7/30/11, tech rascal <techrascal...@gmail.com> wrote:
> >>>>> > can anyone explain in detail .....how structure padding is
> >>>>> advantageous???
>
> >>>>> > On Fri, Jul 29, 2011 at 10:28 PM, Rohit Srivastava
> >>>>> > <access2ro...@gmail.com>wrote:
>
> >>>>> >> padding based on the bit interleaving(low order) which is basically
> >>>>> >> hardware dependent.
>
> >>>>> >> On Fri, Jul 29, 2011 at 10:10 PM, Puneet Gautam
> >>>>> >> <puneet.nsi...@gmail.com>wrote:
>
> >>>>> >>> Thanks guys...so much...!!
>
> >>>>> >>> On 7/29/11, nullpointer <nullpointer...@gmail.com> wrote:
> >>>>> >>> > #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 <aaron.nar...@gmail.com>
> >>>>> 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
> >>>>> >>> >> <puneet.nsi...@gmail.com>wrote:
>
> >>>>> >>> >> > @nikhil: If i declare "Char b" after "int c".., would there be
> >>>>> any
> >>>>> >>> >> > difference...?
>
> >>>>> >>> >> > On 7/28/11, Nikhil Gupta <nikhilgupta2...@gmail.com> 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 <
> >>>>> >>> aman.goya...@gmail.com>
> >>>>> >>> >> > wrote:
>
> >>>>> >>> >> > >> yes this will be the case.
>
> >>>>> >>> >> > >> On Wed, Jul 27, 2011 at 11:35 PM, Puneet Gautam
> >>>>> >>> >> > >> <puneet.nsi...@gmail.com>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 <nikhilgupta2...@gmail.com>
> >>>>> 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
> >>>>> >>> >> > >>> > <puneet.nsi...@gmail.com>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
> >>>>> >>> algogeeks@googlegroups.com.
> >>>>> >>> >> > >>> >> To unsubscribe from this group, send email to
> >>>>> >>> >> > >>> >> algogeeks+unsubscr...@googlegroups.com.
> >>>>> >>> >> > >>> >> 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
> >>>>> >>> algogeeks@googlegroups.com.
> >>>>> >>> >> > >>> > To unsubscribe from this group, send email to
> >>>>> >>> >> > >>> > algogeeks+unsubscr...@googlegroups.com.
> >>>>> >>> >> > >>> > 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
> >>>>> algogeeks@googlegroups.com.
> >>>>> >>> >> > >>> To unsubscribe from this group, send email to
> >>>>> >>> >> > >>> algogeeks+unsubscr...@googlegroups.com.
> >>>>> >>> >> > >>> 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
>
> ...
>
> read more »

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to