当前位置: 首页 > news >正文

境外网站建设网站建设7个基本流程

境外网站建设,网站建设7个基本流程,网站建设维护费一年多少钱,网站建设意义一直想搞清楚类对象的数据成员和虚函数的内存布局&#xff0c;今天刚好有时间&#xff0c;所以就写了个demo查看了一下具体的内存布局情况&#xff08;使用的编译器为微软的&#xff09;。下面是自己demo的代码&#xff1a;#include <iostream> #include <windows.h&g…

一直想搞清楚类对象的数据成员和虚函数的内存布局,今天刚好有时间,所以就写了个demo查看了一下具体的内存布局情况(使用的编译器为微软的)。

下面是自己demo的代码:

#include <iostream>
#include <windows.h>//#pragma pack(4)  //影响每个类对象对齐的字节数,默认对齐到8字节
class A
{
public:virtual void Test1() {};int a;
};class B
{
public:virtual void Test2() {};int b;
};class C :public A, public B {
public:virtual void Test1() override{}virtual void Test2() override{}virtual void Test3() {};int c;
};void main()
{C *pC = new C();pC->a = 1;pC->b = 2;pC->c = 3;int size = sizeof(*pC);int sizeA = sizeof(A);int sizeC = sizeof(C);A* pA = pC;B* pB = pC;int sizeA1 = sizeof(*pA);bool bRet = (pB == pC);
}
  • 下面是代码执行的时候内存布局截图:

从截图可以得到以下结果:

  1. 派生类对象C首先包含了基类A对象的数据,然后包含基类B对象的数据,最后才是包含自己的数据成员。

  1. 派生类C中包含了2个虚表,一个虚表是指向基类A中的函数,一个虚表是指向基类B中的函数。类C有2个虚表是因为它派生自两个基类。如果是单继承就只有一个虚表。

还有一个知识点无法从图中得知:如果派生类中包含自己的虚函数,则这个函数会添加到第一个虚表的尾部。

  • 下面是代码执行的时候对象占用内存大小截图:

类A对象会占用的内存大小为16字节:虚表指针8个字节+数据成员a占用4个字节,此时只有12个字节,但是微软编译器默认是对齐到8字节的,所以最终加上字节对齐,整个类A对象占用的内存大小为16字节。

类C对象占用的内存大小为40字节:类A的部分占用16字节+类B的部分占用16字节+数据成员c占用4个字节,此时只有36个字节,根据字节对齐默认为8字节,所以最终加上字节对齐,整个类C占用的内存大小为40字节。

如果将前面代码中的第四行代码“//#pragma pack(4)”的注释去掉(将编译器字节对齐强制设为4字节),此时各个类对象的内存占用大小会发生变化。具体如下:

类A对象会只占用12字节(虚表指针8个字节+数据成员a占用4字节,刚好对齐到4字节),类C对象会占用28字节(类A对象12字节+类B对象12字节+数据成员C占用4字节,刚好对齐到4字节)

对齐到4字节的内存占用大小截图:

  • 下面是将pC(类C对象的地址)赋值给pA(类A指针)和pB(类B指针)以后,pC,pA,pB具体值的截图:

从截图可知:

  1. pA的值和pC的值相等:这是因为类C的继承关系中,类A是第一个基类,所以在类C对象的内存布局中,首先就是类A所占用的部分。

  1. pB的值-pC的值=12字节:这是因为类C的继承关系中,类A是第一个基类,类B是第二个基类,所以在类C对象的内存布局中,类B放在类A的后面,只要把pC的地址加上类A占用的部分(12字节,对齐到4字节)就是pB的地址。

根据上面的结果,我们知道pB和pC虽然指向同一个对象,但是他们的地址值不一样,如果用pB和pC比较会返回true还是false呢?下面是运行截图:

我们发现最终的比较结果为true,这个是因为编译器在比较两个指针的时候,不是简单的对两个地址值进行比较,如果发现两个指针所属的类有继承关系的时候,会先进行转换,然后再比较。

http://www.zhongyajixie.com/news/14989.html

相关文章:

  • 开福区网站建设论坛优化营商环境条例全文
  • wordpress 随机读取一篇文章七台河网站seo
  • 上海个人医疗网站备案表互联网营销行业前景
  • 海口网站建设方案咨询免费推广的方式
  • 征途网站开发背景seo搜索引擎优化入门
  • 常州经开区建设局网站网络游戏推广员的真实经历
  • wordpress运行死慢天津seo培训机构
  • 靠谱建网站公司aso安卓优化公司
  • 做别人一样的网站吗有没有免费的写文案的软件
  • 响应式企业网站系统百度指数分析大数据
  • wordpress托管教程安卓优化大师hd
  • 大型网站制作怎么样推广app拿返佣的平台
  • 网站开发 北京seo技术博客
  • 大连住建部官方网站湛江今日头条
  • 建设一个网站需要什么硬件求职seo
  • 网站简单化网络营销的方法有哪些?举例说明
  • 动易网络 官方网站班级优化大师官方网站
  • 有教做点心的网站吗鄞州seo服务
  • 微信小程序开发怎么做朝阳区seo
  • 临沂网站制作公司哪家好资源搜索引擎搜索神器网
  • 六十岁一级a做爰片免费网站郑州seo管理
  • 网站建设云南才力seo技术外包 乐云践新专家
  • 互联网最好的公司上海优化公司
  • 老网站绑定新网站如何做?南通网站快速收录
  • 公司响应式网站建设报价百度一下百度一下你就知道
  • 网站备案靠谱吗百度seo关键词排名优化
  • 温州 做网站关键词密度查询站长工具
  • 顺德公司做网站网站运营公司
  • 建设网站预算网站推广方案策划
  • 彩票网站开发的搜索引擎排名查询