hello!guys,recent days ,i come across a problem when i write a C program,that is "How to calculate the size of struct ",i have a part of C source code below: Code: #include <stdio.h> struct b { float f; int a[2]; char p; }; int main(void) { printf("sizeof(struct(b))=%d\n",sizeof(struct b)); return 0; } After compiling using GCC 4.6.1,the result is sizeof(struct(b))=16 then ... I think the = (sizeof(float)) + 2*(sizeof(int)) + (sizeof(char)) =4+2*4+1 =4+8+1 =13 not equal 16. oh my god !! Could some one tell me why?thank you very much! ^@^ (compile environment Windows XP sp3,TDM-GCC 4.6.1,X86 architecture)
Padding. In short, each item of a different type is on a 4-byte boundary. So char p effectively takes up 4 bytes (well, it doesn't because it's a char, but the other 3 bytes are not used.) If you had Code: float f; int a[2]; char p,q,r; then this would probably also be 16. chars don't have to be on 4-byte boundaries so p,q,r use 3 of those 4 bytes. This isn't something you should worry about; padding is very rarely an issue, and by the time it is, you'll know enough about programming to know why and how to solve it.