看一个类在内存中的布局最直接的方法是使用OD之类的调试器,动态跟踪关于类成员的存取代码,但是该方法使用起来不是很方便,而且也有可能因为有的成员的访问代码不便跟踪。
解决之道是:VC编译器(CL.EXE)提供了一个隐藏开关,用于打印编译器为类所确定的类Layout信息。
该方法最好在命令行下使用,因为在IDE中编译会在每行头部输出额外的信息,这样会打乱原始输出。
下面介绍使用技巧:
首先写一个类(类文件分别为test.h和test.cpp):
class Test {
protected:
int a;
int b;
public:
Test(void);
~Test(void);
};
开关1:
-d1reportSingleClassLayout
其语法为:
cl [x.cpp] -d1reportSingleClassLayout[类名]
使用以下命令行命令:
cl Test.cpp -d1reportSingleClassLayoutTest
则cl会在控制台中输出Test类的布局信息:
Test.cpp
class Test size(8):
+---
0 | a
4 | b
+---
开关2:
-d1reportAllClassLayout
这个就不举例了,输出所有类的Layout