C++-虚函数对字节对齐的影响
隐藏成员变量:虚基类表指针、虚函数表指针
出现“隐藏成员变量”时对齐规则:隐藏成员的加入不能影响在其后的成员的对齐。
- 隐藏的成员确确实实属于类的成员。
- 隐藏成员而插入的总体字节长度必须是结构里面的各个成员中有效对齐参数最大的那个的整数倍。
这样,后面的成员才可以“无视”隐藏成员的存在进行对齐和填充。
虚函数表指针
#pragma pack(8)
class A {
public:
char a;
virtual void f(){}
};
sizeof(A) = 8
#pragma pack(8)
class B {
public:
int c;
double c2;
virtual void f(){}
};
sizeof(B) = 24
#pragma pack(4)
class B {
public:
int c;
double c2;
virtual void f(){}
};
sizeof(B) = 16
class B {
public:
int c;
double c2;
virtual void fun(){}
};
sizeof(B) = 24