虚指针按最大字节对齐?

xiaoguangzaia xiaoguangzaia 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我是在vc和vs2008里面测试的。代码如下:

#include<iostream>

using namespace std;

typedef void(*Fun)(void);

class A
{
public:
A():aa('a'),ab(3.0)
{

}
virtual void AA()
{
cout<<"A"<<endl;
}
char aa;
double ab;
};

int main()
{
A b;

cout << sizeof(A) << endl; //大小为24

Fun pFun = NULL;

pFun = (Fun)*((int*)*(int*)(&b));
pFun(); //正确调用虚函数输出“A”

cout << char(*((char*)(&b)+8))<< endl; //正确输出aa的值'a'
cout << double(*((double*)(&b)+2))<< endl; //正确输出ab的值'3'

return 0;
}

这样测试也就是说明vc/vs中是将虚指针放在类的最开始的。而且虚指针后面有4字节的空间才到aa变量
4(虚指针)+ 4(对齐?)+ 1(aa)+7(对齐)+8(ab)= 24
但是按照一般的理解内存布局不应该是
4(虚指针)+1(aa)+3(对齐)+8(ab)= 16
我又测试了各种排列方式,但是不管怎么排列,输出大小总是24
不知道是不是vc/vs编译器中规定了虚指针大小和类中最大元素一至(如果该元素大于4)
如果是这样有什么用处呢?
...全文

相关推荐

评论 9
收藏 已收藏
分享
返回顶部
xiaoguangzaia
C++ 语言 65,214 成员 250,514 内容