计算结构的大小

use*_*790 0 c struct padding

当我发现这个struct... 的大小时,我正在经历结构成员对齐和结构填充概念的概念.

struct node{
  int b;
  char a;
 };
Run Code Online (Sandbox Code Playgroud)

...是8个字节(即它包含3个字节的填充),而这个struct... 的大小...

struct node{
  char a;
};
Run Code Online (Sandbox Code Playgroud)

......只有1个字节.为什么后者没有填充?

hac*_*cks 7

请记住这两个填充规则:

  1. 仅当结构成员后跟具有较大对齐要求的成员或在结构的末尾时才插入填充.
  2. 最后一个成员填充所需的字节数,以便结构的总大小应该是任何结构成员的最大对齐的倍数.

构件a在第二结构后面没有任何部件或构件具有较大的对准和它也是最大的对准构件,这意味着-没有填充.

阅读此答案以获得更详细的解释.