【C语言】结构体对齐规则

文章目录

      • 一、内存对齐规则
      • 二、结构体的整体对齐:

一、内存对齐规则

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.这意味着编译器可能会在结构体末尾添加填充字节,以确保整个结构体满足上述对齐要求。

你可能感兴趣的:(C语言,c语言,结构体对齐)