读书人

在内存对齐下这两个有什么区别

发布时间: 2013-01-28 11:49:56 作者: rapoo

在内存对齐上,这两个有什么区别?
为什么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(){};
};
[解决办法]
clss BBB少了一个int变量,int a2;
[解决办法]

引用:
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(){};
};

[解决办法]

[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]
[解决办法]
引用:
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

读书人网 >C++

热点推荐