字节对齐的细节和编译器实现相关,但一般而言,满足三个准则:
1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
2)
结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal
adding);
3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing
padding)。
建议如果没有把握,在定义结构时就用:
#pragma pack(1)
typedef struct ...
{
...;
...;
} ...;
#pragma pack()
显示指定一下就比较保险了。
字节对齐原则与实践
本文详细介绍了字节对齐的基本原则,包括结构体成员的对齐方式、内部及尾部填充等,并提供了一种确保一致性的方法,即通过预处理指令明确指定对齐。
1556

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



