诀窍:
调整成员排列顺序,4字节空间为一段,不够就补
看完下面的例子后你学会了四字节后,再多问一个问题:为什么是4字节?
所有的操作都是为了最优,
不同位数的CPU可取地址的宽度不一样,
一口能吃的饭,不10口,也不半口,一口就好,
在32位机器上,
4字节一口一口的吃最优(为甚么最优无须再深入了)。
例子:
struct A{ char a; int b; short c; };
解析:
char+3 | int | short + 2| = 4|4|4 = 12字节
struct B{ short c; char a; int b; };
解析:
short+char+1|int| = 4|4 = 8字节
再分析一个复杂的结构:
struct sockaddr_in
{
short sin_family;/*Address family一般来说AF_INET(地址族)PF_INET(协议族)*/
unsigned short sin_port;/*Port number(必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字)*/
struct in_addr sin_addr;/*IP address in network byte order(Internet address)*/ 32位 比如127.0.0.1 4段*每段8位 =32位|
unsigned char sin_zero[8];/*Same size as struct sockaddr没有实际意义,只是为了 跟SOCKADDR结构在内存中对齐*/
}
解析:
short + unsigned short | in_addr| 8| = 16字节