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

时间:2010-10-24 07:19:36

标签: c struct structure

  

可能重复:
  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)的大小?

这是编译器问题吗?

2 个答案:

答案 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是实现定义的。