-
-
[求助]数据对齐的问题!百思不解
-
发表于:
2008-7-24 18:32
3733
-
VC++6.0平台
#include <iostream>
using namespace std;
class A9
{
public:
char c0;
};
class A10 : virtual public A9
{
public:
char c1;
};
class A11 : public A9 //非virtual,故意的,为了测试
{
public:
char c2;
};
class A12 : public A10, public A11 //故意的,为了测试
{
public:
char c3;
};
int main(int argc, char* argv[])
{
cout<<"CLASS A9 :"<<sizeof(A9)<<endl;
cout<<"CLASS A10 :"<<sizeof(A10)<<endl;
cout<<"CLASS A11 :"<<sizeof(A11)<<endl;
cout<<"CLASS A12 :"<<sizeof(A12)<<endl;
}
输出结果:
1
9
2
13
郁闷了,这个9和13是怎么得来的?按照数据对齐不该呀?
以A10的9为例:指向虚基类的指针4字节,两个char类型2字节,4+2=6,数据对齐以指针的4字节为标准,应该是8字节啊?
在我加入以下语句后:
A10 a10;
printf("%p\n",&(a10.c1));
printf("%p\n",&(a10.A9::c0));
发现a10中c1的地址为0x0013FF18,而c0的地址为0x0013FF1C,为什么2个char类型之间空了3字节?也就是浪费了3字节?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课