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.