为什么结构的sizeof大于其各部分的总和?

时间:2015-09-07 13:38:18

标签: c

       typedef struct{
       short age;
       int money;
       char c; 
       }Persoana;   

       int main(void){
       Persoana *a = malloc(sizeof(Persoana));
       printf("%ld   %ld",sizeof(a->money),sizeof(a->age));
       printf("   %ld\n",sizeof(*a));   } ~

代码打印" 4212" .4和2都可以但是如何12 ???

1 个答案:

答案 0 :(得分:6)

这是为了演示编译器完成的填充问题。它(编译器)在这里做的是将结构的每个部分对齐到4字节字边界(=> 4 * 3 = 12字节),而不是将它们打包成9个字节。这是由编译器执行的,以允许数据成员访问,该访问遵循目标CPU内存访问模式。