結構的sizeof我對整個「數據對齊」的東西很困惑:與工會
#include <stdio.h>
int main(){
struct st{
int i,*p;
char c;
union { char type[4]; unsigned char d;} un;
};
struct st s1={25,&a,'X',"asdf"};
printf("sizeof s1 is %d",sizeof(s1));
return 0;
}
由於數據比對,我想,既然的
int i : 4 bytes
int *p : 8 bytes
char c : 1 byte(+3)
union : 4 bytes
輸出將大小是20,但是這輸出sizeof s1 is 24
! 爲什麼輸出24?這是否是int * p,即8個字節?
'sizeof'''''''(分配多少內存)不一定是它的部分大小的總和。編譯器可能會填充它的一部分(比你指出的更重要)。或者它可以將其舍入到8的倍數。例如,參見http://stackoverflow.com/questions/119123/why-isnt-sizeof-for-a-struct-equal-to-the-sum-of- sizeof-of-member – lurker
給出下面的答案,你應該首先聲明'p',或者檢查你的編譯器是否有相關的'#pragma's。 –
@EricJablow:如果你先把'p'放在首位,大小仍然是24.你可以自己檢查一下。 –