虚函数表指针,终竟占多少字节
虚函数表指针,到底占多少字节?
谁能解释一下,下面两种情况,sizeof(A)大小,为什么是8和24?
考虑了内存对齐之后:
发现第一种情况,虚函数表指针占4字节。
发现第二种情况,虚函数表指针占8字节。
为什么第二中情况,a变量要放在第8个字节的位置?为什么不是放在第4个字节的位置?
****************************************************
class A
{
public:
int a;
A(){}
virtual ~A(){}
};
sizeof(A) == 8
********************************************************
class A
{
public:
int a;
double d;
A(){}
virtual ~A(){}
};
sizeof(A) == 24
***********************************************
------解决思路----------------------
首先标准没规定怎么布局,gcc多为16
个人猜测,先将所有成员按照结构体对齐排列好,然后再算上虚表指针和这个结构体对齐。
------解决思路----------------------
楼主结贴了吧:
Virtual是放在最前面算的,而且是单独分配内存的 不能和其他类型合并(包括其他Virtual)
猜测↑
谁能解释一下,下面两种情况,sizeof(A)大小,为什么是8和24?
考虑了内存对齐之后:
发现第一种情况,虚函数表指针占4字节。
发现第二种情况,虚函数表指针占8字节。
为什么第二中情况,a变量要放在第8个字节的位置?为什么不是放在第4个字节的位置?
****************************************************
class A
{
public:
int a;
A(){}
virtual ~A(){}
};
sizeof(A) == 8
********************************************************
class A
{
public:
int a;
double d;
A(){}
virtual ~A(){}
};
sizeof(A) == 24
***********************************************
------解决思路----------------------
首先标准没规定怎么布局,gcc多为16
个人猜测,先将所有成员按照结构体对齐排列好,然后再算上虚表指针和这个结构体对齐。
------解决思路----------------------
楼主结贴了吧:
Virtual是放在最前面算的,而且是单独分配内存的 不能和其他类型合并(包括其他Virtual)
猜测↑