内存对齐

在结构体中,首次接触到了内存对齐

typedef struct inf{
    char name;
    int age;
    char sex;
}inf;
int main()
{
    inf zhang;
    printf("sizefof = %d\n",sizeof(zhang));
    return 0;
}
结果:
[jwq@localhost memory]$ ./mem_alg 
sizefof = 12

为什么要内存对齐?

计算机的内存是以字节(Byte)为单位划分的,理论上cpu可以访问任意编号的字节,但实际上不是如此。

以32位cpu为例,一次可以处理32位的数据,因此命令地址总线每次读取4字节的数据(32位)。这样能最有效的处理数据,因此cpu寻址以4字节为一个步长,这样可以最快的速度寻址并处理数据,同时又不会造成遗漏。

对与程序来说一个变量最好位于一个寻址步长之内。若果不是那么需要分次读取再拼接数据,这样效率变低。

**将一个数据尽量放在一个步长之内,避免跨步长存储,这称为内存对齐。**这是一种牺牲空间换时间的做法。

最后,内存对齐的大小可以自己设定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值