深入理解计算机系统------->对齐限制笔记

   对齐限制

      c语言中在用sizeof()函数判断一个结构体类型(struct)所占字节大小的时候会发现它可能比理论上的所占字节大小要大。这是由于许多计算机系统对基本数据类型的 可允许地址做出了一些限制,要求某种类型的对象的地址必须是某个值k(通常是2,4,8)的倍数,这称为对齐限制。这种限制可以简化处理器和存储器系统之间的接口的硬件设计。

        例子,假设一个处理器总是从存储器中取8字节数据,则地址必须为8的倍数。如果将所有的double类型的对象地址对齐成8的倍数,那么用一次的存储器操作就能完成读写操作。

        当然无论数据是否对齐,计算机都能正确执行。对象的地址对齐是以空间换时间来提高处理效率。大多数编译器在编译的时候给出了是否对齐的选项。默认是对齐的。

        Linux使用的对齐策略是2字节数据类型的地址必须是2的倍数,而较大的数据类型(int,int*,float,double)的地址必须是4的倍数。也就是要求一个short类型的地址的最低位必须等于0.而较大的数据类型的地址最低两位必须都是0.

       注意Linux上可以使用命令行-malign-double使GCC为double类型的数据使用8字节的对齐方式,但在与用4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值