可能重复:
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
答案 0 :(得分:1)
这是因为对齐要求。如果你要声明一个struct small
s:
struct small arr[10];
然后每个元素的a
将紧跟在前一个元素之后。显然,在你的系统上,int
需要与四字节边界对齐 - 要么作为绝对要求,要么只是为了获得最佳性能 - 所以struct small
包括三个字节的填充以确保后续struct small
的{{1}}已正确对齐。