On 6 August 2011 21:50, siddharth srivastava <akssps...@gmail.com> wrote:
> Hi > > On 6 August 2011 20:20, SANDEEP CHUGH <sandeep.aa...@gmail.com> wrote: > >> padding wud be between int & char..(for ur last case) >> >> now u said if it starts at 4 , still the block will be 8 (size of double), >> that is 7 bytes to be padded.. >> >> so double element of structure would be starting at 4 + char(1) + 7 byte >> padding ==12 >> >> but 12 is not a multiple of 8.. >> > > the whole concept is about the alignment and word size. > If word size is 4( 32 bit m/c) then the memory allocation would start at a > multiple of 4 and if it is 8 , then the memory allocation would start at a > multiple of 8. > Moreover, the explaination I gave above hold for 64 bit architecture. > For 32 bit architecture a double is 8 bytes aligned > just a correction: on gcc, double is 4 bytes aligned > but the word size is 4 bytes, so for a structure like this > > struct a > { > double d; > int i; > } > > the size would be 12 (on 32 bit) and 16 (on 64 bit) > the result are for linux(gcc) system > > >> so there is a problem?? >> >> >> >> >> >> >> On Sat, Aug 6, 2011 at 8:06 PM, siddharth srivastava <akssps...@gmail.com >> > wrote: >> >>> but if the reference is not 0 .. if it wud have been 4 then for tht case >>>> tell me do we really need that 7 bytes?? >>>> >>> >>> yes, because in any case the block would be of 8 bytes only >>> so even if you start at 4, you would have only 7 bytes left in that >>> location for the next variable(which in this case is a double of 8 bytes, so >>> the allocation would start at the 8th byte from the first location) >>> >>> Look at the following stack: X represents occupied memory, - represents >>> the memory to be padded (in bytes) >>> >>> X - - - - - - - >>> XXXXXXXX >>> XXXX - - - - >>> >>> So, first char occupies 1 byte, then there are only 7 bytes left at that >>> index, which are not enough for a double to be stored (got my point) >>> Moreover, if you had >>> struct a{ >>> char c; >>> int i; >>> double d; >>> } >>> >>> then the size would have been 16 >>> >>> as after allocating a char, there was enough space for an int to be >>> stored. (just not sure if padding would be after int or between int and >>> char) >>> >>> >>> >>> >>>> >>>> and yeah it is dependent on compiler size.. >>>> if u compile this snippet >>>> >>>> struct demo >>>> { >>>> char c; >>>> double d; >>>> int s; >>>> >>>>> } >>>> >>>> >>>> in turbo c , its giving 11,, that means compiler nt doing padding at all >>>> in turbo c.. >>>> >>>> On Sat, Aug 6, 2011 at 7:50 PM, siddharth srivastava < >>>> akssps...@gmail.com> wrote: >>>> >>>>> Hi Sandeep >>>>> >>>>> On 6 August 2011 19:16, SANDEEP CHUGH <sandeep.aa...@gmail.com> wrote: >>>>> >>>>>> take this case >>>>>> >>>>>> struct demo >>>>>> { >>>>>> char c; >>>>>> double d; >>>>>> int s; >>>>>> >>>>>>> } >>>>>> >>>>>> >>>>>> what wud be the size?? >>>>>> >>>>>> >>>>>> solution is 24 according to following:--> >>>>>> >>>>>> char (1) + 7 byte padding +double(8)+int(4)+ 4 byte padding >>>>>> >>>>>> >>>>>> suppose address starts at 4.. >>>>>> >>>>>> i just wanna ask .. why there is 7 byte padding.. because just after >>>>>> 3 bytes padding after char we are getting address that is multiple of >>>>>> 8(size >>>>>> of largest).. >>>>>> >>>>> >>>>> >>>>> after 3 bytes of padding i.e. the 4th byte(if reference is 0), is not a >>>>> multiple of 8. >>>>> Moreover, try understanding with this example: >>>>> visualize a stack of memory with each location having the size of the >>>>> largest sized variable in the structure. >>>>> So in your case, each stack element is ought to be 8 bytes (due to >>>>> double) >>>>> Now, when first character is allocated, we have only 7 bytes left at >>>>> that location in the stack, hence double has to be allocated in the next >>>>> location.i.e. 2nd stack element and 8th byte (again reference 0) >>>>> >>>>> So total size is ought to be occupied is 24 in this case >>>>> >>>>> >>>>> say if you had this declaration: >>>>> struct a >>>>> { >>>>> char a; >>>>> double d; >>>>> int c; >>>>> int e; >>>>> } >>>>> >>>>> then too size would have been 24 as after allocation of int c, we still >>>>> have 4 bytes in the same location which are then occupied by e (and were >>>>> padded in previous case) >>>>> >>>>> Let me know, if I am not clear. >>>>> >>>>> @All >>>>> Is it really architecture dependent (32 bit or 64 bit) ? >>>>> >>>>> >>>>> >>>>>> >>>>>> can u please tell me?? >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> 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. >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Regards >>>>> Siddharth Srivastava >>>>> >>>>> >>>>> -- >>>>> 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. >>>> >>> >>> >>> >>> -- >>> Regards >>> Siddharth Srivastava >>> >>> >>> -- >>> 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. >> > > > > -- > Regards > Siddharth Srivastava > > > -- Regards Siddharth Srivastava -- 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.