C中的结构尺寸

时间:2014-04-06 10:45:53

标签: c pointers

我在C中制作了一个双重链接结构,并且需要知道如何计算定制结构的大小。我理解某些数据类型的大小,并且我的机器上的指针是8个字节。

但是,当我创建此数据类型时

struct doublylinked {
    int data;
    struct doublylinked *next;
    struct doublylinked *prev;
};

我知道里面的所有值总共加起来为20个字节。

数据大小= 4

下一个的大小= 8

prev = 8

的大小

但是,当我打印出这种数据类型的大小时,它等于24。

双重链接的大小= 24

这些额外的4个字节来自哪里?

由于

2 个答案:

答案 0 :(得分:3)

额外的空间来自编译器添加的填充,这使得在某些CPU上访问速度更快。

实际上在内存中可能看起来像这样:

data     [4 bytes]
padding  [4 bytes] <- That way, next is aligned on a multiple of his own size
next     [8 bytes]
prev     [8 bytes]

答案 1 :(得分:0)

8字节nextprev变量需要8字节对齐。

换句话说,它们需要位于可被8整除的内存地址中。

因此编译器在4字节data变量之前或之后添加了一个4字节的填充。

请注意,这通常与平台有关(即,某些处理器可能支持未对齐的加载/存储操作,在这种情况下,编译器可能会选择避免填充)。