带有C指针的结构的内存开销

时间:2013-11-13 13:15:47

标签: c pointers memory

我意识到当我们的结构中包含指针时会有内存开销。这里有一个例子:

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)。

有人能解释我为什么会这样吗? 谢谢!

(我很确定必须在其他地方问过这个问题,但我找不到它。)

1 个答案:

答案 0 :(得分:7)

那是 padding 标准表示在结构中或结尾处可能存在未经修饰的填充但不在开头。 C99标准部分草案6.7.2.1 结构和联合说明符 13 表示:

  

[...]结构对象中可能有未命名的填充,但不在其开头。

和段 15 说:

  

结构或联合的末尾可能有未命名的填充。