This question already has answers here:
Why isn't sizeof for a struct equal to the sum of sizeof of each member?
(11个答案)
4年前关闭。
代码显示“ 4212” .4和2都可以,但是怎么这样12 ???
(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