天天看點

對結構體的sizeof解答

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位元組

繼續閱讀