概述
各个硬件平台对存储空间的处理上有很大的不同。客户代码从8051或arm系列移植到APT芯片时会遇到优化存储空间,适配特定CPU取址方式问题,结构体对齐正确的使用尤为重要。
结构体对齐规则
-
结构体(struct)的数据成员,第一个数据成员存放的地址为结构体变量偏移量为0的地址处。
-
其他结构体成员自身对齐时,存放的地址为min{有效对齐值为自身对齐值, 指定对齐值} 的最小整数倍的地址处。
-
总体对齐时,字节大小是min{所有成员中自身对齐值最大的, 指定对齐值} 的整数倍。
使用结构体对齐的配置步骤:
-
程序中包含 stdio.h 头文件。
-
调用#pragma pack(N),N=1,2,4,8。
-
不同结构体,不同的对齐方式重新调用#pragma pack(N)即可。
实例分析:
1、CDK默认对齐(4字节)
操作代码:
占用空间解析:
2、1字节对齐
操作代码:
占用空间解析:
3、2字节对齐
操作代码:
占用空间: