以下结构体中所有字段的字节偏移量在CS:APP书籍的第3.45问题中存在问题。
这里是书中给出的答案,它为
这是我的解决方案,只给
struct {
int *a;
float b;
char c;
short d;
long e;
double f;
int g;
char *h;
} rec;
这里是书中给出的答案,它为
c
添加了三个字节的填充,为d
添加了两个字节的填充,为g
添加了四个字节的填充。field size offset
----- ---- ------
a 8 0
b 4 8
c 1 12
d 2 16
e 8 24
f 8 32
g 4 40
h 8 48
这是我的解决方案,只给
c
添加了一字节的填充,并给g
添加了四字节的填充。field size offset
----- ---- ------
a 8 0
b 4 8
c 1 12
d 2 14
e 8 16
f 8 24
g 4 32
h 8 40
那么,我的解决方案有什么问题呢?它似乎符合对齐规则(编辑*这里的“规则”只是我自己总结的简化概念,不完整或通用),所有对象的偏移量都是对象大小的倍数。
非常感谢任何解释。