82 C++对象模型探索。数据语义学 - 单一继承下的数据成员布局

在使用继承后,由于内存对齐的影响,会带来内存空间的额外增加。

windows 和 linux 的图示:

对于windows,在继承时,子类中应该包含父类的全部,包括了父类内存对齐时空的内存部分。

对于linux,编译器会有优化,会将最终子类和直接父类融合,利用上一个父类因为内存对齐浪费的空间。这个是从实验看到结果后,个人的想法。linux的G++编译器不可能将父类的父类的内存的空间都改变,优化也只能优化最终子类和最终子类的爸爸。

在linux上就会有一个问题,因为g++做了优化,因此使用memcpy这类mem相关的操作要注意。

class Teacher8 {
public:
	int age1;
	char ch1;
	char ch2;
	char ch3;
};

class Teacherbase8 {
public:
	int age1;
	char ch1;
};

class Teacher81 : public Teacherbase8 {
public:
	char ch2;
};

class Teacher82 : public Teacher81 {
public:
	char ch3;
};


void main() {
	cout << sizeof(Teacher8) << endl; //大小占用为8,且是紧凑的
	printf("Teacher8::age1的偏移量是:%p\n", &Teacher8::age1);
	printf("Teacher8::ch1的偏移量是:%p\n", &Teacher8::ch1);
	printf("Teacher8::ch2的偏移量是:%p\n", &Teacher8::ch2);
	printf("Teacher8::ch3的偏移量是:%p\n", &Teacher8::ch3);

	//8
	//	Teacher8::age1的偏移量是:00000000
	//	Teacher8::ch1的偏移量是:00000004
	//	Teacher8::ch2的偏移量是:00000005
	//	Teacher8::ch3的偏移量是:00000006

	//如果我们将Teacher8使用集成拆分,再来看一下内部布局会不会发生变化。

	cout << sizeof(Teacher81) << endl; //大小占用为12,
	printf("Teacher81::age1的偏移量是:%p\n", &Teacher81::age1);
	printf("Teacher81::ch1的偏移量是:%p\n", &Teacher81::ch1);
	printf("Teacher81::ch2的偏移量是:%p\n", &Teacher81::ch2);
	//12
	//	Teacher81::age1的偏移量是:00000000
	//	Teacher81::ch1的偏移量是:00000004
	//	Teacher81::ch2的偏移量是:00000008

	cout << sizeof(Teacher82) << endl; //大小占用为16,
	printf("Teacher82::age1的偏移量是:%p\n", &Teacher82::age1);
	printf("Teacher82::ch1的偏移量是:%p\n", &Teacher82::ch1);
	printf("Teacher82::ch2的偏移量是:%p\n", &Teacher82::ch2);
	printf("Teacher82::ch3的偏移量是:%p\n", &Teacher82::ch3);

	//16
	//	Teacher82::age1的偏移量是:00000000
	//	Teacher82::ch1的偏移量是:00000004
	//	Teacher82::ch2的偏移量是:00000008
	//	Teacher82::ch3的偏移量是:0000000C
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/353126.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytorch-metric-learning度量学习工具官方文档翻译

基于Pytorch实现的度量学习方法 开源代码&#xff1a;pytorch-metric-learning官网文档&#xff1a;PyTorch Metric Learning官方文档 度量学习相关的损失函数介绍&#xff1a; 度量学习DML之Contrastive Loss及其变种度量学习DML之Triplet Loss度量学习DML之Lifted Structu…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-菜单管理实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

【大数据】详解 Flink 中的 WaterMark

详解 Flink 中的 WaterMark 1.基础概念1.1 流处理1.2 乱序1.3 窗口及其生命周期1.4 Keyed vs Non-Keyed1.5 Flink 中的时间 2.Watermark2.1 案例一2.2 案例二2.3 如何设置最大乱序时间2.4 延迟数据重定向 3.在 DDL 中的定义3.1 事件时间3.2 处理时间 1.基础概念 1.1 流处理 流…

ubuntu20.04 安装ROS2 记录

主要参考B站古月居的ROS2入门21讲 和 以下链接&#xff08;基本和视频上一致&#xff09; ubuntu20.04安装ROS2 详细教程_ubuntu20.04 ros2-CSDN博客 但是中间有些需要注意的地方&#xff0c; 1&#xff0c;添加源 步骤中提到 sudo curl -sSL https://raw.githubuserconten…

基于QC-LDPC编码的循环移位网络的FPGA实现

一、桶式移位寄存器(barrel shifter) 八位桶式移位寄存器的VHDL实现如下&#xff0c;由于每一层结构相似&#xff0c;于是采用生成语句for_generate实现&#xff0c;使用该代码实现的RTL级分析和理论的结构一致&#xff0c;仿真结果也符合预期。 entity barrel_shift isGENE…

【RT-DETR有效改进】反向残差块网络EMO | 一种轻量级的CNN架构(轻量化网络,参数量下降约700W)

前言 大家好&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持ResNet32、ResNet101和PP…

文件上传之大文件分块上传进度控制处理

在分块上传内容结束以后的事件监听&#xff0c;我们会实现 unlinkSync 删除临时文件操作&#xff0c;那么试想一下&#xff0c;在这个事件监听中&#xff0c;我们是否可以通过totalChunks以及currentChunk获取当前上传的进度情况呢&#xff1f; 后端 upload上传接口&#xff…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-友情链接管理实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

在 React 组件中使用 JSON 数据文件,怎么去读取请求数据呢?

要在 React 组件中使用 JSON 数据&#xff0c;有多种方法。 常用的有以下几种方法&#xff1a; 1、直接将 JSON 数据作为一个变量或常量引入组件中。 import jsonData from ./data.json;function MyComponent() {return (<div><h1>{jsonData.title}</h1>&…

openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板

文章目录 openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板概述笔记工程中需要的openssl的库实现END openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板 概述 openssl3.2 - 测试程序的学习 整了几个test.c, 每开一个新的测试工程, 总要改这改那的. …

Maven入门及其使用

目录 一、Maven入门 1.1 初识Maven 1.2 Maven的作用 1.2.1 依赖管理 1.2.2 统一项目结构 1.2.3 项目构建 1.3 Maven坐标 1.4 Maven仓库 1.4.1 Maven仓库概述 二、Maven的下载与安装 2.1 安装步骤 2.1.1 解压安装&#xff08;建议解压到没有中文、特殊字符的路径下。&#xff09…

【JavaScript】ECMA6Script es6

文章目录 一、 es6的介绍二、 es6的变量和模板字符串2.1 let 与 var2.2 const 与 var2.3 模板字符串 三、 es6的解构表达式四、 es6的箭头函数4.1 声明和特点4.2 实践和应用场景4.3 rest和spread 五、es6的对象创建和拷贝5.1 对象创建的语法糖5.2 对象的深拷贝和浅拷贝 六、es6…

STM32 PWM驱动设计

单片机学习&#xff01; 目录 文章目录 前言 一、PWM驱动配置步骤 二、代码示例及注意事项 2.1 RCC开启时钟 2.2 配置时基单元 2.3 配置输出比较单元 2.4 配置GPIO 2.5 运行控制 三、PWM周期和占空比计算 总结 前言 PWM本质是利用面积等效原理来改变波形的有效值。 一、PWM驱动…

【electron】打包问题处理

目录 项目无法在win7执行场景尝试处理 项目无法在win7执行 场景 使用electron25.0.1、electron-builder24.2.1&#xff0c;打出来的项目在win7系统上跑不起来&#xff0c;报错无法定位程序输入点DiscardVirtualMemoty于动态链接库KERNEL32.dll上。 尝试处理 通过百度发现ele…

编曲学习:和声音程 调式体系 唱名法 调式调性

34届和声音程 调式体系 唱名法 调式调性https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_65af994be4b064a8cb1c3a5f?course_idcourse_2XLKtQnQx9GrQHac7OPmHD9tqbv 34届独立音乐人编曲训练营https://app8epdhy0u9502.pc.xiaoe-tech.com/p/t_pc/course_pc_detail/camp_p…

Tomcat 简介安装

目录 1、概念介绍 Tomcat 组件 HTTP 请求过程 Tomcat 目录结构 Tomcat 命令 配置文件说明 2、安装环境 安装JDK 安装Tomcat 创建管理用户 3、搭建虚拟主机 1、概念介绍 端口&#xff1a;8080 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器, 按照 Sun 提供…

DevOps系列文章之 GitLabCI汇总

GitlabCI环境搭建 前提 先安装 docker Docker容器化安装 docker pull gitlab/gitlab-ee:12.4.0-ee.0 创建挂载目录 mkdir -p /srv/gitlab mkdir -p /srv/gitlab/config # 映射到 Glitlab 容器中的配置目录 mkdir -p /srv/gitlab/logs # 映射到 Glitlab 容器中的日志目录 m…

ArXiv| Graph-Toolformer: 基于ChatGPT增强提示以赋予大语言模型图数据推理能力

ArXiv| Graph-Toolformer: 基于ChatGPT增强提示以赋予大语言模型图数据推理能力. 来自加利福利亚大学戴维斯分校计算机科学系的IFM实验室发表在arXiv上的文章:“Graph-ToolFormer: To Empower LLMs with Graph Reasoning Ability via Prompt Augmented by ChatGPT”。 文章的…

P1045 [NOIP2003 普及组] 麦森数题解

题目 形如的素数称为麦森数&#xff0c;这时P一定也是个素数。但反过来不一定&#xff0c;即如果P是个素数&#xff0c;不一定也是素数。到1998年底&#xff0c;人们已找到了37个麦森数。最大的一个是P3021377&#xff0c;它有909526位。麦森数有许多重要应用&#xff0c;它与…

pcl之滤波器(三)

pcl滤波器 pcl一共是有十二个主要模块&#xff0c;详细了解可以查看官网。https://pcl.readthedocs.io/projects/tutorials/en/latest/#basic-usage 今天学习一下pcl的滤波器模块。 滤波器模块&#xff0c;官网一共是提供了6个例程&#xff0c;今天看第五个、第六个。 从一…
最新文章