再总结字节对齐问题

12 篇文章 0 订阅

时间:2011年4月19日   

目的:理解结构体的字节对齐原因以及如何计算结构体所占内存大小

心得: 踏踏实实做人,认人真真做事。 

---------------------------------------------------------华丽的分割线----------------------------------------------------

首先明确一些基本概念:

1、字节对齐的原因:字节对齐主要是考虑到计算机的读取效率;

2、自身对齐:一般数据位sizeof(),类或者结构体为其成员元素中最大的sizeof();

3、指定对齐:一般32位机的默认值为 4个字节,也可以自己指定对齐pragma pack(value);

4、有效对齐:与自身对齐和指定对齐值中较小的为有效对齐;


有了以上的概念就可以很好的理解字节对齐的问题了:

总结起来就两句话:

(1)元素存放的首地址可以被自身对齐整除;

(2)结构体的整体储存空间大小能被其有效对齐整除;

能遵守上面两条规则就可以完全掌握不同平台下面的字节对齐问题了。

 

即三种对齐两种规则就可以把字节对齐问题全部解决!!!

 

举例:

 

其输出结果为:8

 

百度百科:

  其实字节对齐的细节和具体编译器实现相关,但一般而言,满足三个准则:

  1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;

  2) 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;例如上面第二个结构体变量的地址空间。

  3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。例如上面第一个结构体变量。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值