[LCP]struct size

Bill Rausch bill at numerical.com
Wed Aug 22 03:31:03 UTC 2001


At 8:08 AM -0700 8/20/01, Bill Rausch wrote:
>At 9:17 PM +0200 8/18/01, Roberto Diaz wrote:
>>  > please see this code
>>>  struct somestruct
>>>  {
>>>   int a;
>>>   char b;
>>>   char c;
>>>  }stvar;
>>>  int main()
>>>  {
>>>    printf("%d",sizeof stvar); /* you dont need () since it is an instance*/
>>>  }
>>>  the o/p is 8.  i was expecting 6 as 'a' occupies 4 bytest and 'b','c'
>>>  one byte each !  how is it 8 ??
>>
>>Aligment.. the word size in i386 is 32 bits 4 bytes so the compiler left
>>holes into your structure so all is aligned at 4 bytes boundaries.
>>
>
>Note that 8 bytes total size doesn't match 32 bit alignment.  You'd 
>have had 12 bytes total size then.  It does match what would happen 
>with 16 bit alignment.
>
>Various CPUs/compilers are capable of byte addressing or not. 
>Apparently you are using one that is capable of addressing each pair 
>of bytes.
>

Never mind.  I'm an idiot.  I know that it will pack multiple char's 
into a word.  However, something like this:

struct x { char a; int b; char c; }; would take 12 bytes.

-- 
  Bill Rausch, Software Development, Unix, Mac, Windows
  Numerical Applications, Inc.  509-943-0861   bill at numerical.com



More information about the linuxCprogramming mailing list