关于结构中变量的内存分配的问题(在C中)

Cha*_*hak 3 c struct structure

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

#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;
}
Run Code Online (Sandbox Code Playgroud)

代码可在IDEONE获得.

为什么struct 1(word1)的大小大于struct 2(word2)的大小?

这是编译器问题吗?

Jam*_*lis 9

int可能有一个四字节对齐要求,所以在第一种情况下,这两个的char元素必须附加到他们三个填充字节,但是在第二种情况下,你只需要第二次经过两次填充字节char元素(因为一个char元素都有一个对齐一个字节).

word1 好像:

0   |1   |2   |3   |4   |5   |6   |7   |8   |9   |10  |11
a   |  (padding)   |b                  |c   |  (padding)
Run Code Online (Sandbox Code Playgroud)

word2 好像:

0   |1   |2   |3   |4   |5   |6   |7
a   |b   |(padding)|c               
Run Code Online (Sandbox Code Playgroud)