虚函数sizeof的问题,求大牛
#include <iostream>
#include <cstdio>
using namespace std;
struct Base{
private:
int i;
float a;
public:
virtual ~Base();
};
struct Derived : public Base{
private:
double c;
int d;
char e;
public:
virtual ~Derived();
};
int main() {
printf("%d\n", sizeof(Base));
printf("%d", sizeof(Derived));
return 0;
}
结果是: 12, 32
我把Derived中的char e;变量去掉后再RUN还是这个值?咋求出来的啊,没想明白那个sizeof(Drived)的值是怎么求出来的?
还有继承的时候虚函数到底怎么处理的?包括内存对齐与继承的关系?谢谢了
[解决办法]
子类里面有double 所以8字节对齐
也就是8(doubel c)+8(int d;char e)+4(virtual)=20
加上父类的12就是32
8(int d;char e)
这一部分 你去掉了char 也会是8
这就是内存对齐 和你的继承与否无关
[解决办法]
又见sizeof,
[解决办法]
建立虚函数后,自动回生成虚表,由一个指针指向这个虚表,所以要+4 ,无论有多少虚函数,只会产生一个虚表。
故第一个结果为4+4+4 = 12
再和ls的相加 = 32。
字节按高位对齐
[解决办法]
学习~~~
[解决办法]