sizeof是一個關鍵字,用來計算類型的大小,如int佔用4個字節等....
主要有兩個注意的方面:
一:字節對齊
從結構體的第一個變量開始講究對齊,以字節爲單位;
二:字節對齊要滿足3個準則:
a.結構體的第一個變量能夠被最寬的基本類型成員的大小所整除;
b.結構體每個成員相對於結構體首地址的偏移量都是當前成員大小的整數倍;不夠在後面填充;
c.結構體的總大小一定要是最寬基本類型的整數倍,不夠的話在末成員後面添加填充;
struct s1
{
int i;
char *sz;
double t;
};
struct s2
{
int w;
double z;
char *sx;
};
printf("sizeof(s1):%d", sizeof(s1)); //16
printf("sizeof(s2):%d", sizeof(s2)); //24
解釋:第一個結構的大小i 爲4個字節,char* 爲4個字節,double爲8個字節,字節對齊都工整,所以是16個字節
|--------int--------|-------char*--------| 8字節
|------------------double---------------| 8字節
第二個結構的大小w是4個字節,z是8個字節,sx是4個字節,總數確實16個字節
|--------int--------|---------------------| 8字節
|---------------- double---------------| 8字節
|--------char*----|---------------------| 8字節