四字节对齐,不要忽视为什么是4字节

博客介绍了学习四字节的诀窍,即看完例子后多问为何是4字节,还提及要分析一个复杂结构,但未给出具体内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

诀窍:

调整成员排列顺序,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字节

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值