结构体struct的自然对齐问题(经典)

本文讨论了C语言中结构体struct的自然对齐问题,解释了为什么编译器会让结构体成员按照特定方式排列,以及这种对齐方式对CPU访存效率的影响。通过实例展示了结构体大小的计算,并提到了如何通过编译器选项实现紧凑对齐。此外,还提及了MIPS体系结构中内存对齐的重要性及其处理非对齐访问的方式。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

结构体struct的自然对齐问题
下面的机构体
struct A
{
    char c;
    int i;
    char cc;
};
它的sizeof()是多少呢? 如果是紧凑对齐的话,当然是sizeof(char)+sizeof(int)+sizeof(char); 但编译器默认编译的却不是紧凑对齐的,在32-bit的机器上编译结果是12, 这是一个char占用了一个int的空间,换句话说,在c和i之间有三个空余的byte! 这就是自然对齐的效果。
为什么要自然对齐呢?
当初百度的gg电面我的时候,我胡乱的解释了一下,居然是对的,真是佩服我的扯淡能力。原来x86架构下的cpu访存时,是需要地址对齐的,举个例子,取short型时,地址需要是2的倍数,取int型是地址需要是4的倍数,如果不是的话,则可能降低cpu访存的效率。例,一个int的地址是0x03的话,先是按地址0x00取int的第一个byte,然后按地址0x04取剩下的三个byte,所以原本一次访存搞定的事情,却做了两次,简直是脱裤子放屁--多此一举嘛,哈哈。
怎么计算自然对齐的sizeof()呢?
这个才是面试官的杀手锏,哈哈。
其实就是一个规律--这个取决于cpu的字长
在32bit的cpu上,对齐的单位是4个byte,64bit的我没有试过,谁有环境搞

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值