结构体填充与数据对齐
- 结构变量的大小等于它包含所有变量的总大小。
- 结构体填充:是编译器用来对齐内存偏移数据。
- 字段填充:为了提高性能,编译器在结构体中利用
结构体填充方法进行数据对齐。 - 数据对齐:当CPU读写内存时,它都在小块内(字长或4个字节)进行。这种安排增加了系统的性能,有效地将数据存放在字长整数倍的偏移地址。
- 结构体中每个数据类型都要对齐
- 联合体中按照最大长度的数据类型对齐
- 按照基本数据类型对齐
为什么要字节对齐?
现代计算机中内存的存储理论上都是按照 byte 大小来存储的,但实际上是按照 字长(word size) 为单位存储的。这样做是减少CPU访问内存的次数,加大CPU访问内存的吞吐量。比如同样读取8个字节的数据,一次读取4个字节那么只需要读取2次。

字节对齐方法
- C编译器中采用
#pragma指令#pragma pack(n)编译器将按照n个字节对齐 _packed: 按照一字节对齐。packed一般会以降低运行性能为代价,由于大多数cpu处理数据在合适的字节边界数的情况下会更有效,packed的使用会破坏这种自然的边界数。- GCC编译器中采用
attribute((aligned (n)))方式对齐。让所作用的结构成员对齐在

本文探讨了C语言中结构体填充与数据对齐的重要性,详细解释了字节对齐的原因,旨在提高CPU访问内存的效率。通过介绍不同编译器的字节对齐方法,如GCC的__attribute__((packed))和__attribute__((aligned(n))),强调了结构体指针在处理大数据成员时的效率优势。
最低0.47元/天 解锁文章
471

被折叠的 条评论
为什么被折叠?



