结构体struct
是存储多个数据对象的内存块,这些对象不重叠。union
是一块内存,用于存储多个数据对象,但只能存储其中最大的一个,因此在任何时候只能存储一个数据对象。
union
和 struct
之间的主要区别在于 union
成员覆盖彼此的内存,因此 union
的 sizeof
= 1 ,而 struct
成员一个接一个地分布在内存里(在可选的填充之间分布)。union
也足够大以包含其所有成员,并且具有适合其所有成员的对齐方式。假设 int
只能存储在 2 个字节的地址并且是 2 个字节的宽度,而 long
只能存储在 4 个字节的地址并且是 4 个字节的长度。
struct
的内存大小
struct
的 sizeof
并不总是等于每个成员的 sizeof
总和。这是因为编译器添加了填充padding bytes以避免对齐问题。仅当结构体的成员后面有占有更多内存的成员,或在结构末尾时才添加填充padding。不同的编译器可能有不同的对齐约束。
例子
// C program to illustrate
// size of struct