c++的class内存布局

大纲

  • vs中怎么查看c++ class的布局
  • 额外的vs技巧

vs中怎么查看c++ class的布局

先搞个简单的代码例子:

#include <iostream>

class ClassA
{
public:
	int a = 10;
};

int main()
{
	auto cla = new ClassA();
	delete cla;
	system("pause");
	return 0;
}

vs中有这么一个参数/d1 reportSingleClassLayout

png

reportSingleClassLayout后紧跟随的是需要dump的类名称!

然后执行工程编译,就能在编译输出平台看到以下信息了!

png

1>class _s__RTTIBaseClassArray	size(1):
1>	+---
1> 0	| arrayOfBaseClassDescriptors
1>	+---
1>class ClassA	size(4):
1>	+---
1> 0	| a
1>	+---

有了以上这些,我们在学习c++的时候就能通过这种方式去了解c++的虚函数表之类的了!

额外的vs技巧

以前有说过使用g++生成相应的预编译文件,汇编文件等,那么在这里就补充一下vs的;

预编译文件

png

运行或者编译后,在Debug目录下可以看到一个以.i结尾的文件,使用文本打开,看到就是预处理文件了!

注意开启了预编译到文件后,运行会提示link不到obj。

汇编

png

运行或者编译后,在Debug目录下可以看到一个以.asm结尾的文件,该文件就是汇编文件了!

如果已经按照前文开启了预编译到文件,建议关掉!