#pragma pack(N)
编译器用'N'来设置数据的对齐方式。默认32位OS对齐字节是4,64位对齐字节是8。'N'有可能影响结构体内部成员的对齐位置,以及结构体整体大小。
gcc 中,N不能大于默认的对齐字节数,否则不生效。
对齐规则
规则一:
每个成员变量在其结构体内的偏移量(offset)都是“MIN(N,成员变量类型的大小)”的倍数(multiple)。
规则二:
如果有嵌套结构体,那么内嵌结构体的第一个成员变量在外结构体中的偏移量,是“MIN(N,内嵌结构体中那个数据类型大小最大的成员变量)”的倍数。
规则三:
整个结构体的大小要是“MIN(N,这个结构体内数据类型大小最大的成员变量)”的倍数。如果有内嵌结构体,那么取“MIN(N,内嵌结构体中数据类型大小最大的成员变量)”作为计算外结构体整体大小的依据。