C语言字节对齐
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐
对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同一些平台对某些特定类型的数据只能从某些特定地址开始存取其他平台可能没有这种情况,
台的要求对数据存放进行对齐,会在存取效率上带来损失比如有些平台每次读都是从偶地址开始,如果数据显然在读取效率上下降很多这也是空间和时间的博弈
不需要考虑对齐问题编译器会替我们选择适合目标平台的对齐策略当然,我们也可以通知给编译器传递预编译指令而改变对指定数据的对齐方法
话,常常会对一些问题感到迷惑最常见的就是结果,出乎意料为此,我们需要对对齐算法所了解
数据结构中的各成员如何进行对齐的
型数据一个
字节但是因为编译器要对数据成员在空间上进行对齐现在把该结构体调整成员变量的顺序
8
7
,单位字节
)数据类型自身的对齐值:就是上面交代的基本数据类型的自身对齐值
)结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值
)数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中较小的那个值
有了这些值,我们就可以很方便的来讨论具体数据结构的成员和其自身的对齐方式有效对齐值
最终用来决定数据存放地址方式的值,最重要有效对齐
而数据结构中的数据变量都是按定义的先后顺序来排放的第一个数据变量的数据结构的起始地址结构体的成员变量要对齐排放,结构体本身也要根据自身的有效对
结合下面例子理解)这样就不难理解上面的几个例子的值了
开始排放该例子中没有定义指定对齐值,在笔者环境下,该值默认为
第三个变量
内容再看数据结构
所占用故
的变量又
的八个字节所以