我在C中制作了一个双重链接结构,并且需要知道如何计算定制结构的大小。我理解某些数据类型的大小,并且我的机器上的指针是8个字节。
但是,当我创建此数据类型时
struct doublylinked {
int data;
struct doublylinked *next;
struct doublylinked *prev;
};
我知道里面的所有值总共加起来为20个字节。
数据大小= 4
下一个的大小= 8
prev = 8
的大小但是,当我打印出这种数据类型的大小时,它等于24。
双重链接的大小= 24
这些额外的4个字节来自哪里?
由于
答案 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字节next
和prev
变量需要8字节对齐。
换句话说,它们需要位于可被8整除的内存地址中。
因此编译器在4字节data
变量之前或之后添加了一个4字节的填充。
请注意,这通常与平台有关(即,某些处理器可能支持未对齐的加载/存储操作,在这种情况下,编译器可能会选择避免填充)。