一道小问题,关于sizeof的

来源:百度知道 编辑:UC知道 时间:2024/05/27 16:15:49
struct test
{ int m1;char m2;float m3;
union uu { char u1[5];int u2[2] ua;
} myaa;
sizeof(struct test)的值,怎么算?谢了!

m1 2
m2 1
m3 4
max (u1[5] 5,u2[2] 4,ua 2)= 5
sizeof(struct test)= 2+1+4+5=12字节

sizeof(type or value);
运算符sizeof是编译时求取的一个数值,指示了某个数据类型在内存中的大小!
当sizeof测试结构体等其他某些自定义类型的时候,以你写的test为例,在大多数32位机器中int至少是2个字节,而char是一个字节,float是至少4字节的,他们的字节数不同,因此编译器会对数据在内存中进行边界对其.因此往往sizeof所测试到的结构类型总是比手工计算的占用空间要打一些

你理解一下吧:
int m=(sizeof(myaa.m1)+sizeof(myaa.m2)+sizeof(myaa.m3)+3)/4;
int n=(sizeof(myaa.u1)+sizeof(myaa.u2)+3)/4
sizeof(struct test)=n>m?n:m;

注:(...+3)/4是字节对齐