关于char和double的一道sizeof()的题目

来源:百度知道 编辑:UC知道 时间:2024/06/14 09:50:39
#pargma pack(4)
class A{char c;virtual fun(){};}
class B{double d;virtual fun(){};}
#pargma pack()
void main()
{
printf("sizeof A is %d\n",sizeof(A));
printf("sizeof B is %d\n",sizeof(B));
}

结果为:sizeof A is 8
sizeof B is 12
请问为什么sizeof B is 12?
为什么是12,怎么不是64?

这个实际是一个字节对齐得问题:
#pargma pack(4) 表示强制4字节对齐
在CLASSA里CHAR因为字节对齐用了4BYTE,后面virtual fun(){}4 byte所以SIZE是8,如果没有#pargma pack(4) 结果应该是5
第二个就是DOUBLE的8字节+virtual fun(){}的4字节 =12

我这里是8 和16关于如何实现多态,各个编译器是不一定是一样的