结构体中的数据对齐
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体中的数据对齐相关的知识,希望对你有一定的参考价值。
c语言结构中需要注意的就是数据存储的对齐方式。
对齐的好处:对齐主要是为了方便数据的访问,提高计算机的处理速度,但同时它会浪费内存空间。
CPU的优化规则大致是这样的:对于n字节的元素,它的首地址能被n整除,才能获得最好的性能。
对齐的使用原则:
1、一般的基本对齐原则是按着最大的基本类型的长度进行对齐。较小的元素可以组合起来填充一段内存,实现基本的对齐。前提是其满足条件2。
2、结构体中的元素也要满足一定的分布条件,就是元素的存储起始地址要满足能够整除该元素类型的长度。
3、在结构体中存在结构体的情况下,也只是按照结构体中最大的基本类型长度对齐(包括内部结构体中的最大基本类型长度)。
在windows中基本都是按照最大基本类型长度进行对齐的。
在实际中,建议将最大基本类型的元素放在开始的地方,然后将其他数据按照一定规律(能否组合起来满足对齐条件等)来定义结构体。
结构体的变量声明顺序不是随便的,如果考虑好对齐关系能够节省大量的存储空间。
以上是关于结构体中的数据对齐的主要内容,如果未能解决你的问题,请参考以下文章
C语言 泛型链表 如何计算(结构体中各元素)相对内存地址?(字节对齐,结构体对齐)offsetof()函数 & ( (struct X*)0 ) -> Y)语法