响水凹

欢迎来到 Guang-Wen Duan (Dennis Duan) 的个人 Wiki

用户工具

站点工具


computer:c:tips:struct_pad_size

结构体的填充与大小

出于对齐(Alignment)的需要,结构体成员之间,以及最后一个成员之后,可能会有一些填充空间(也称为空洞,hole)。

成员之间的填充是为了满足成员的对齐要求。最后的填充则是为了满足整个结构体的对齐要求:要保证结构体对象能做为数组的元素,而数组的各个元素的地址是连续的,所以结构体的起始地址与结束地址都要在对齐边界上。

sizeof计算的结构体大小(size),包含填充空间在内,所以,结构体size不是简单的等于各个成员的大小之和。

例如下面的结构体定义:

struct s {
        double value;
        char name[10];
};

如果要求double类型按8字节对齐,则sizeof(struct s)的大小可能是24字节,多余的填充用来确保结构体满足8字节的对齐限制。

computer/c/tips/struct_pad_size.txt · 最后更改: 2014/11/01 02:02 由 127.0.0.1