可能重复:
Why isn't sizeof for a struct equal to the sum of sizeof of each member?
#include <stdio.h>
int main(){
struct word1{
char a;
int b;
char c;
};
struct word2{
char a;
char b;
int c;
};
printf("%d\t%d\n", sizeof(int), sizeof(char)); //Output : 4 1
printf("%d\t%d\n", sizeof(struct word1), sizeof(struct word2)); //Output: 12 8
return 0;
}
代码位于IDEONE。
为什么struct 1(word1)的大小大于struct 2(word2)的大小?
这是编译器问题吗?
答案 0 :(得分:9)
int
可能有四字节对齐要求,因此在第一种情况下,两个char
元素都需要附加三个填充字节,但在第二种情况下,您只需要第二个char
元素之后的两个填充字节(因为char
元素具有一个字节的对齐)。
word1
看起来像:
0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 |11
a | (padding) |b |c | (padding)
word2
看起来像:
0 |1 |2 |3 |4 |5 |6 |7
a |b |(padding)|c
答案 1 :(得分:4)
案例1:
0 1 2 3 4
+---------------------+
| a | Unused | 4 bytes
+---------------------+
0 1 2 3 4
+---------------------+
| b | 4 bytes
+---------------------+
0 1 2 3 4
+---------------------+
| c | Unused | 4 bytes
+---------------------+
总计:12
案例2:
0 1 2 3 4
+---------------------+
| a | b | Unused | 4 bytes
+---------------------+
0 1 2 3 4
+---------------------+
| c | 4 bytes
+---------------------+
总计:8
P.S:Structure Padding是实现定义的。