This question already has answers here:
Why isn't sizeof for a struct equal to the sum of sizeof of each member?
                                
                                    (11个答案)
                                
                        
                                4年前关闭。
            
                    
       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 ???

最佳答案

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

关于c - 为什么结构的大小大于其各个部分的总和? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32440081/

10-10 16:36