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

Gab*_*el -4 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));   } ~
Run Code Online (Sandbox Code Playgroud)

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

san*_*iso 6

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