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
那么,我的解决方案有什么问题?它似乎符合对齐规则(编辑*这里的“规则”只是我自己的一个简化概念总结,它不是完整的或通用的),所有对象的偏移量都是对象大小的倍数。
非常感谢任何解释。
最佳答案
关于c - C 结构的数据对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56877547/