为什么在结构内部和外部时,char变量的大小从4变为1?

时间:2012-03-04 22:23:38

标签: c

  

可能重复:
  Why isn't sizeof for a struct equal to the sum of sizeof of each member?

以下是代码:

#include <stdio.h>

struct small{
  int a;
  int b;
  char c;
}; 

void main(){
  printf("The size of int is: %d\n",(int)sizeof(int));
  printf("The size of char is: %d\n",(int)sizeof(char));
  printf("The size of small is: %d\n",(int)sizeof(struct small));
}

这是输出:

The size of int is: 4
The size of char is: 1
The size of small is: 12

我希望小的大小为9,但结果是12

1 个答案:

答案 0 :(得分:1)

这是因为对齐要求。如果你要声明一个struct small s:

的数组
struct small arr[10];

然后每个元素的a将紧跟在前一个元素之后。显然,在你的系统上,int需要与四字节边界对齐 - 要么作为绝对要求,要么只是为了获得最佳性能 - 所以struct small包括三个字节的填充以确保后续struct small的{​​{1}}已正确对齐。