- 首先要分析c++类的内存布局,我们应该找到能够直观的看到编译器生成的类的内存分布情况,因为我使用的是VS进行开发的,所以使用VS自带的功能进行查看。步骤只有一步,就是在命令行中添加
/d1 reportSingleClassLayoutA
,这样就可以在代码编译时,看到类的内存分布情况。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/83b250a26743529667f50569ae1cf059.png)
2.下面我们写一个简单的类,看以下它的内存分布
#include "stdafx.h"
#include <iostream>
#include <inttypes.h> //由于x86和x64的区别,我们在使用int进行指针转换的时候,
//会出问题,所以需要引入该文件对此情况进行处理
using namespace std;
#pragma pack(8) //防止由于字节对齐不一致,产生的内存布局不一致的问题
class A
{
public:
void add() {} //成员函数会在存在代码区,不会在类内分布
static int bd; //静态成员变量会在静态区(也又称为全局区的),不会在类内分布
static void sum() {} //静态成员函数会在代码区,不会在类内分布
//画重点
//一旦出现虚函数,在类的内存分布一开始就必须是一个一个指向虚表指针
//该虚表维护着该类自己的虚函数的函数指针,存储的顺序和声明的顺序一直。
//当然虚表本身不占据类的内存布局
//虚函数本身不占据内存的分布,也是在代码区
virtual int aaa(int a, int b) {
cou