写程序一直想看内存里数据是怎么分配的,尤其是类的内存结构,尤其当设计到继承的时候。其实微软有一个未正式发布的编译选项 /d1reportSingleClassLayout
话不多说,下面描述具体使用方法:
这个编译选项有2种形式:/d1reportSingleClassLayout、/d1reportAllClassLayout 。前者是查看单个类,后者是查看文件中所有类的结构。
比如我想看某个文件类的结构,比如Test.cpp,首先在vs2008工具栏的Tools下找到Visual Studio 2008 Command Prompt,点击,出现如图所示命令框:
假设Test.cpp的路径为D:\Test.cpp,里面有个类叫D,然后输入:cl -d1reportSingleClassLayoutD D:\Test.cpp,这里要注意Layout后面的那个D是Test.cpp中的一个类的名字,
回车就会出现类的结构,以我的为例
类A和D的代码如下:
class A
{
public:
int a;
void af();
void virtual vaf();
};
void A::vaf(){printf("vaf\n");}
void A::af(){printf("af\n");}
class D :virtual public A
{
int d;
void df();
void virtual vdf();
};
void D::vdf(){printf("vdf\n");}
void D::df(){printf("df\n");}