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

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(){};
};
...全文
170 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
同求解

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧