C语言字节对齐64位和32位

(第一次写博客:有不对的地方还望指出)

 

借前辈们的话再详细补充linux64位下字节对齐:
 
  在GNU GCC 编译器中,遵循的准则:根据最宽的基本数据类型来定——对齐模数最大只能是4,也就是说,即使结构体中有double类型,对齐模数还是4,所以对齐模数只能是1,2,4。
 
  linux64位系统下默认最大对齐位8,也就是如用#pragma pack(16)设置字节对齐超过最大对齐,其无效,还是按照最大对齐,所以对齐模数只能是1,2,4,8;如果最大类型为int,那么按照4字节对齐,如果最大字节为short按照2字节对齐,最大字节为char按照1字节对齐;
 
  但是64位下如果有指针则按8字节对齐,因为在64位下指针占8字节,除此之外32下int占多少字节,其64位下就占多少个字节。
 
  很奇怪只有这个特殊------但是64位下如果有longdouble则按16字节对齐,这个原因不知道是为啥,实践实际就是这样。
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值