结构体数组占用的空间

way*_*orc 0 c memory-alignment

我对《计算机系统:程序员的视角》 (第 3 版(2015 年 10 月 6 日))一书的问题 3.44 有关数据对齐的问题有疑问。

问题:

对于以下每个结构声明,确定每个字段的偏移量,即结构的总大小,以进行 8 位对齐:

struct P1 {short i; int c; int *j; short *d}
...
struct P4 {char w[16]; char *c[2]}
struct P5 {struct P4 a[2]; struct P1 t}
Run Code Online (Sandbox Code Playgroud)

书中给出的答案:

  • 结构P1:
C j d 全部的
0 2 6 14 16
  • 结构P4:
w C 全部的
0 16 32
  • 结构P5:
A t 全部的
0 24 40

我不明白的是为什么 did struct P4 a[2]inP5只需要 24 个字节?
既然P5.a是一个大小为2的数组P4,那它不应该占用2 * 32 (total size of P4)字节吗?


为了确保我正确引用这本书,附上下面的屏幕截图: 在此输入图像描述 在此输入图像描述

小智 5

您拥有 CS:APP3e 全球版的副本。

正如我们在勘误网页中所述:

关于全球版的说明:不幸的是,出版商在全球版中安排了一组不同的练习和家庭作业问题。做这件事的人做得不太好,所以这些问题和他们的解决方案有很多错误。我们尚未为此版本创建勘误表。

这是被搞乱的众多问题之一。