结构体的内存大小计算主要遵循以下原则:
- 每个成员类型的大小:每个成员的内存大小由它的类型决定。例如,
int
通常是 4 字节,char
是 1 字节,double
是 8 字节,等等。 - 成员的对齐要求:系统对不同数据类型有对齐要求。例如,在 32 位系统中,
int
通常要求 4 字节对齐,double
通常要求 8 字节对齐。这意味着该成员的起始地址必须是其大小的整数倍。 - 结构体的对齐要求:结构体的总大小必须是其最大对齐成员的倍数。这通常会导致在结构体末尾添加填充字节,以确保结构体的对齐符合最大成员的对齐要求。
1. 内存对齐原则
每个成员在结构体中的位置,必须满足它自身的对齐要求。编译器可能会在成员之间添加填充字节(padding),以保证每个成员的起始地址满足其对齐要求。
- 对齐要求是指内存地址必须是某个数值的倍数,通常是 2 的幂。
- 最后,结构体的大小需要是最大对齐的倍数。