您的位置:首页 > 其它

MSVC查看类的对象内存布局

2014-06-09 10:17 246 查看
        虽说自己对内存对象内存布局这一块还算比较熟悉(鄙人这么认为),但是实际要可视化一个内存布局,还是没做过,今天在网上瞎逛,突然发现了MSVC居然支持输出对象的布局结构,这个命令嘛,就是-d1reportSingleClassLayout和-d1reportAllClassLayout了。
        顾名思义,前者用于输出指定名字的类的结构,后者则是输出全部的类的结构,试了下后面的命令,发现按下Enter键后,留给鄙人的不是这个文件所得对应的类的内存结构,而是将近几秒的刷屏.....所以还是-d1reportSingleClassLayout靠谱,根据我的实验,-d1reportSingleClassLayout会输出strstr匹配类名的类的结构。  
        比如我定义了四个类:MyCAA,MyCAAPre,NextMyCAA,MidMyCAAMid
 
      如果我输入命令:cl main.cpp -d1reportSingleClassLayoutMyCAA,
        此时会把我上面定义的四个类的全部内存布局输出来。如下图所示:



类的布局结构
对于,MSVC的类的布局结构一般按照下面的顺序布局的:

虚表指针(如果有的话)
基类
类的成员变量
如下面所定义的类,
#include <stdio.h>
class MyTestClsBase
{
int m_nA;
};
class MyTestCls : public MyTestClsBase
{
public:
int		m_nVar;
bool	m_bVar;
float	m_fVar;
static int	ms_nVar;

virtual	void VirTest(){};
static	void StaTest(){};
void Test();
};
int main()
{
return 0;
}

其内存布局结构为:



其中的adjustor不知道啥意思,没找到!

如果图方便,可以再工程的c++选项的命令行加上该命令,如需查看类MyOwnCls,则添加命令:/d1reportSingleClassLayoutMyOwnCls 即可,会生成对应的.layout文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MSVC 内存布局 结构