VS查看C++类的内存分布初步了解类的内存分布

Posted bcbobo21cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS查看C++类的内存分布初步了解类的内存分布相关的知识,希望对你有一定的参考价值。

在VC++项目属性,如下图红线位置,输入 /d1 reportAllClassLayout ,确定;

之后,编译代码,即可查看类的内存分布;

写一个简单C++类,生成,在输出窗口可看到如下;

 

    普通类的排布方式,成员变量依据声明的顺序进行排列(类内偏移为0开始); 

继承出一个类,增加一个变量c;生成;看到类的内存分布如下;

 

    子类继承了父类的成员变量,在内存排布上,先是排布了父类的成员变量,接着排布子类的成员变量; 

写一个简单类,增加一个虚函数;生成;则看到如下;

 

     这时内存结构分成了两个部分,上面是内存分布,下面是虚表;
     VS所带编译器是把虚表指针放在了内存的开始处(0地址偏移),然后再是成员变量;
    下面生成了虚表,紧跟在&test1_meta后面的0表示,这张虚表对应的虚指针在内存中的分布;下面列出了虚函数,左侧的0是这个虚函数的序号,这里只有一个虚函数,只有一项,如果有多个虚函数,会有序号为1,为2的虚函数列出来;

 

以上是关于VS查看C++类的内存分布初步了解类的内存分布的主要内容,如果未能解决你的问题,请参考以下文章

C++类内存分布

C++语法小记---面向对象模型(实例的内存分布)

虚函数和虚拟继承的内存分布

关于虚函数,类的内存分布以及类的成员函数调用原理

VS查看类的内存布局

一文详解C++类的内存布局和虚函数底层实现机制