文章目录
- 一、内存对齐规则
- 二、结构体的整体对齐:
一、内存对齐规则
1.第一个数据成员:结构体的第一个数据成员总是放置在其起始地址处,即偏移量为0的位置。
2.其他数据成员的对齐:每个后续成员的存储地址必须是其有效对齐值的整数倍。
自身对齐值是指该成员类型的大小(例如,int 类型通常是4字节)。
指定对齐值可以通过 #pragma pack(N) 宏来设定,其中 N 必须是2的幂次方(如1, 2, 4, 8, 16等)。如果没有特别指定,不同平台有不同的默认值:
在32位Linux系统上,默认为4。
在64位系统上,默认为8。
在ARM CPU上,默认也为8。
有效对齐值是自身对齐值与指定对齐值中的较小者。
二、结构体的整体对齐:
1.结构体的总大小是其所有成员中最大的有效对齐值或指定对齐值(取两者中的较小者)的整数倍。
2.这意味着编译器可能会在结构体末尾添加填充字节,以确保整个结构体满足上述对齐要求。