结构体中的数据对齐

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体中的数据对齐相关的知识,希望对你有一定的参考价值。

c语言结构中需要注意的就是数据存储的对齐方式。

对齐的好处:对齐主要是为了方便数据的访问,提高计算机的处理速度,但同时它会浪费内存空间。

CPU的优化规则大致是这样的:对于n字节的元素,它的首地址能被n整除,才能获得最好的性能。

对齐的使用原则:

1、一般的基本对齐原则是按着最大的基本类型的长度进行对齐。较小的元素可以组合起来填充一段内存,实现基本的对齐。前提是其满足条件2。

2、结构体中的元素也要满足一定的分布条件,就是元素的存储起始地址要满足能够整除该元素类型的长度。

3、在结构体中存在结构体的情况下,也只是按照结构体中最大的基本类型长度对齐(包括内部结构体中的最大基本类型长度)。

在windows中基本都是按照最大基本类型长度进行对齐的。

在实际中,建议将最大基本类型的元素放在开始的地方,然后将其他数据按照一定规律(能否组合起来满足对齐条件等)来定义结构体。

结构体的变量声明顺序不是随便的,如果考虑好对齐关系能够节省大量的存储空间。

以上是关于结构体中的数据对齐的主要内容,如果未能解决你的问题,请参考以下文章

内存对齐

自然对齐和强制对齐

结构体对齐——结构体内存布局

结构体中的冒号_转

C语言 泛型链表 如何计算(结构体中各元素)相对内存地址?(字节对齐,结构体对齐)offsetof()函数 & ( (struct X*)0 ) -> Y)语法

结构体大小的计算,对齐