首页
社区
课程
招聘
[求助]数据对齐的问题!百思不解
发表于: 2008-7-24 18:32 3733

[求助]数据对齐的问题!百思不解

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直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
class A
{
public:
        char a;
        char b;
        int* p;
};
但是这样一个类的大小还是8,难道是虚继承改变了什么规则?
求教于达人,谢谢!
2008-7-24 18:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
没人知道?
个人还在尝试,已经有了想法。
期待高手的意见。
2008-7-25 18:03
0
游客
登录 | 注册 方可回帖
返回
//