我意识到当我们的结构中包含指针时会有内存开销。这里有一个例子:
typedef struct {
int num1;
int num2;
} myStruct1;
typedef struct {
int *p;
int num2;
} myStruct2;
int main()
{
printf("Sizes: int: %lu, int*: %lu, myStruct1: %lu, myStruct2: %lu\n", sizeof(int),
sizeof(int*), sizeof(myStruct1), sizeof(myStruct2));
return 0;
}
这将在我的64位计算机中打印以下内容:
Sizes: int: 4, int*: 8, myStruct1: 8, myStruct2: 16
除了myStruct2
的大小之外,一切都有意义,我认为它只有12而不是16(sizeof(int*) + sizeof(int) = 12
)。
有人能解释我为什么会这样吗? 谢谢!
(我很确定必须在其他地方问过这个问题,但我找不到它。)
答案 0 :(得分:7)
那是 padding 标准表示在结构中或结尾处可能存在未经修饰的填充但不在开头。 C99标准部分草案6.7.2.1
结构和联合说明符段 13 表示:
[...]结构对象中可能有未命名的填充,但不在其开头。
和段 15 说:
结构或联合的末尾可能有未命名的填充。