在内存对齐上,这两个有什么区别?

ngbbxt 2013-01-21 03:30:39
为什么sizeof(AAA)==16,而sizeof(BBB)==24?

BBB不是相当于在前面有一个虚函数表指针吗?应该和AAA是一模一样的吧?

**********************************
class AAA
{
int a1;
int a2;
double d1;
};


class BBB
{
public:
int a1;
double d1;
virtual ~BBB(){};
};
...全文
137 8 点赞 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lishengkai 2013-01-21
class AAA { int a1; int a2; double d1; }; AAA内存中表示: --------(a1和a2) -------- (d1) 总共16 class BBB { public: int a1; double d1; virtual ~BBB(){}; }; BBB内存中 ----____(a1占四字节,但是要按8字节对齐,补齐,“_”表示空的,占四字节) --------(d1) ----____(虚函数指针占四字节,但是要按8字节对齐,补齐,,“_”表示空的,占四字节) 总共24 能看懂不
  • 打赏
  • 举报
回复
ngbbxt 2013-01-21
你错了吧?虚函数表指针,是一定放在结构体的首地址的。 因此,首先开辟的,应该是virtual ~BBB(){};这个8字节吧。。
引用 5 楼 lile1234_show 的回复:
C/C++ code?123456789101112131415161718[code=c]class AAA{//8字节对齐int a1; // 开辟8字节,额外4个 0x01-0x08int a2;// a2存入额外4个 0x05-0x08double d1;//再开辟8个 0x09-0x16}; class BBB{//8字节public:int a1; //……
  • 打赏
  • 举报
回复
lee_鹿游原 2013-01-21
引用 5 楼 lile1234_show 的回复:
C/C++ code?123456789101112131415161718[code=c]class AAA{//8字节对齐int a1; // 开辟8字节,额外4个 0x01-0x08int a2;// a2存入额外4个 0x05-0x08double d1;//再开辟8个 0x09-0x16}; class BBB{//8字节public:int a1; //……
virtual ~BBB(){};//再额外开辟4个 0x16-0x20 考虑最宽字节整数倍。内存增至 0x24
  • 打赏
  • 举报
回复
lee_鹿游原 2013-01-21

[code=c]
class  AAA
{
//8字节对齐
int a1; // 开辟8字节,额外4个 0x01-0x08
int a2;// a2存入额外4个 0x05-0x08
double d1;//再开辟8个  0x09-0x16
};


class BBB
{
//8字节
public:
int a1; //开辟8字节,额外4个 0x01-0x08
double d1;//额外4个不够,再开辟8个 0x09-0x16
virtual ~BBB(){};//再额外开辟8个 0x16-0x24
};
[/code]
  • 打赏
  • 举报
回复
ngbbxt 2013-01-21
指针长度为什么8? 那你测试一下这个: class BBB { public: int a1; virtual ~BBB(){}; };
引用 3 楼 vipjeffreylee 的回复:
引用 2 楼 vipjeffreylee 的回复:clss BBB少了一个int变量,int a2; 测试发现,BBB增加 int a2;的定义,长度依然是24,因此断定:BBB比AAA多了虚拟函数指针,指针长度:8 C/C++ code?12345678910111213141516class AAA{int a1;int a2;double d1;}; c……
  • 打赏
  • 举报
回复
vipjeffreylee 2013-01-21
引用 2 楼 vipjeffreylee 的回复:
clss BBB少了一个int变量,int a2;
测试发现,BBB增加 int a2;的定义,长度依然是24,因此断定:BBB比AAA多了虚拟函数指针,指针长度:8
class  AAA
{
int a1;
int a2;
double d1;
};


class BBB
{
public:
int a1;
int a2;
double d1;
virtual ~BBB(){};
};
  • 打赏
  • 举报
回复
vipjeffreylee 2013-01-21
clss BBB少了一个int变量,int a2;
  • 打赏
  • 举报
回复
wyscs0000 2013-01-21
同求解
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2013-01-21 03:30
社区公告
暂无公告