c++对象模型研究3:数据

开始前先看看

class X {};
class Y:public virtual X {};
class Z:public virtual X {};
class A:public Y,public Z {};

上述X,Y,Z,A中没有任何一个class内含明显的数据,其间只表示了继承关系。

按照书上的例子

sizeof X = 1
sizeof Y = 8
sizeof Z = 8
sizeof A = 12

译注是

sizeof X = 1
sizeof Y = 4
sizeof Z = 4
sizeof A = 8

先看X,事实上并不是空的,编译器会安插进去一个char。使得这个class的对象在内存中配置独一无二的地址。

至于Y和Z受到三个因素的影响:

1.语言本身所造成的额外负担。其实就是之前一直说的virtual问题。

2.编译器对于特殊情况所提供的优化处理。有些编译器会对这个1bytes作出不同的处理(例如省略)。

3.Alignment的限制,我的理解是字节对齐,在大部分机器上,群聚的结构体大小会受到alignment的限制,使它们能够更有效率地在内存中被存取。

ps:一个虚基类对象只会在派生类中存在一份实体,不管它在class继承体系中出现了多少次。

C++对象模型尽量以空间优化和存取速度优化的考虑来表现非static成员数据,并且保持和C语言struct数据配置的兼容性。它把数据直接存放在每一个类对象之中。对于继承而来的非static成员数据(不管是virtual还是非virtual基类)也是如此。而类的static成员数据是存放在全局中,只有一份实例(甚至即使该class没有任何对象实体,其static成员数据也已存在),但是一个template类的static成员数据的行为稍有不同。

每一个类对象必须有足够的大小以容纳它所有的非static成员数据,它可能比你想象的还大,原因是:

1.由编译器自动加上的额外成员数据,用以支持某些语言特性(主要是各种virtual特性)。

2.因为alignment的需要。

成员数据的绑定

时间: 2024-11-08 20:28:52

c++对象模型研究3:数据的相关文章

GPS北斗双模技术应用开发研究—应用数据交互

GPS北斗双模技术应用开发研究-应用数据交互 Android开发原则就是谁对哪个数据感兴趣就可以通过listener去监听一下,那边定位数据肯定也是这样的,关于位置上报的话,笔者不准备在这累赘了,网上好多文章,下面就讲一下双模相关的北斗gps卫星星图搜星具体情况的数据上报以及私有协议的定制. 在locationmanager里面有一个接口addGpsStatusListener,在应用里通过这个接口把listen传下去,这中间有很多过程,最终这个listener在location的provide

c++对象模型研究6:执行期

C++的一件困难事情:不太容易从程序代码看出表达式的复杂度. 执行期语意学,即在程序执行时,编译器产生而外的指令调用,确保对象的构造,内存的释放,以及类型转换与临时对象的生成的安全进行. 对象的构造和析构 一般而言,我们会把对象尽可能放置在使用它的那个程序区段附近,这样做可以节省不必要的对象产生操作和摧毁操作(主要是析构).不建议把所有的对象放在函数或某个区段的起始处. 全局对象 对于全局变量,C++会保证在调用全局变量之前,将全局变量构造出来. 而所有的全局变量都被放置在程序的数据段中(dat

癌症研究中大数据能做的五件事

1. 帮助指导使用已通过的癌症药物 虽然临床试验为医生们提供了许多药物如何发挥作用的有用信息,但是大概只有2%的癌症患者参与了临床试验. 事实上,每天都有成千上万的患者接受诊断和治疗.这意味着其实我们可以从中获得大量的重要数据,来帮助医生与病人在面对不同治疗方案及其可能的结果时做出更好的选择. 美国临床肿瘤学会ASCO发起建立一个数据库:CancerLinQ,旨在获取这些数据.它能将数据提供给医生们, 为他们提供实时的治疗建议.美国基因泰克公司(Genentech)的科学家和医生们都对能帮助AS

HBase模式案例研究列表数据

感谢平台分享-http://bjbsair.com/2020-04-10/tech-info/53341.html 以下是用户 dist-list 中关于一个相当常见问题的的交流:如何处理 Apache HBase 中的每个用户列表数据. 问题: 我们正在研究如何在 HBase 中存储大量(每用户)列表数据,并且我们试图弄清楚哪种访问模式最有意义.一种选择是将大部分数据存储在一个密钥中,所以我们可以有如下的内容: 我们的另一个选择是完全使用如下内容: 每行将包含多个值.所以在一种情况下,读取前三

R语言重要数据集分析研究——搞清数据的由来

搞清数据的由来 作者:李雪丽 资料来源:百度百科

使用bbed编辑研究oracle数据块结构

bbed是随oracle软件发布的一款数据块查看和编辑工具,作为一款内部工具,bbed的功能非常强大,但是如果使用不当可能给数据库造成无法挽回的损失.因此.我们建议在使用bbed修改数据块前备份被修改的数据文件,并且在成功修复数据块后立即将数据库数据导出,并新建数据库. 编辑并使用bbed 首次使用bbed前必须要经过链接编译.编译方法如下: [[email protected] lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed Lin

第二次毕业设计任务书(KDD数据研究)

1.周计划表 时间 计划任务 完成情况 3.9-3.16 初步分析了KDD数据,并用程序实现初步处理 50% 3.17-3.24 了解matlab下的神经网络编程,尝试使用工具包完成简单的功能实现 3.24-3.31 对数据进行再次分析处理,根据输出结果筛选出有用的属性值,并对matlab做架构思考   2.本周完成情况 研究KDD数据: 参考网址KDD CUP 99网页,了解41个属性值,并下载源文件决定使用其中的10%样本数据37万条数据作为训练数据(后期可能会思考删除某些属性和对文件条目进

重复数据删除(De-duplication)技术研究(SourceForge上发布dedup util)

dedup util是一款开源的轻量级文件打包工具,它基于块级的重复数据删除技术,可以有效缩减数据容量,节省用户存储空间.目前已经在Sourceforge上创建项目,并且源码正在不断更新中.该工具生成的数据包内部数据部局(layout)如下: --------------------------------------------------| header | unique block data | file metadata |--------------------------------

SharePoint服务器端对象模型 之 访问网站和列表数据(Part 5)

(五)列表条目(SPListItem) SharePoint中数据的存储基本上都是通过列表条目来完成(文档库中的文档也是一种特殊的列表条目),因此在SharePoint应用开发中,最终是要和列表条目打交道的.在SharePoint对象模型中,使用SPListItem表示列表条目,使用SPListItemCollection表示列表条目集合.   1.列表条目的获取 列表条目的获取有多种方式,一些常用方式如下: (1) 通过SPList的Items属性,获取列表中的所有条目(不包括文件夹本身对应的