请教一下sizeof字节对齐的问题?
如下代码:
class A
{
public:
char ch[5]; //0-4
double dou; //8-15
};
class B : public A
{
public:
virtual void fun () {}; //16-19
public:
short sh; //20-21 -> 23
};
求sizeof(A)和sizeof(B)时,我知道sizeof(A) = 16,没有问题。
但是sizeof(B) 应该等于24啊,怎么运行的结果是32呢?
[解决办法]
gcc好像是用-fdump-class-hierarchy命令,我不太清楚,你可以试试看
内存布局多少会和编译器有一定关系,特别是虚函数表,不同编译器都不一样,所以结构也有可能会不一样。有兴趣可以看一下《深度探索C++对象模型》这本书
[解决办法]
《深度探索C++对象模型》
《C++反汇编与逆向分析技术揭秘》
[解决办法]
这得看B对象的内存布局了 如果虚函数表指针放在对象头部那就为32 要是放在父类成员后面那应该是24
虚函数表指针位置不是固定的吗?