79 C++对象模型探索。数据语义学 - 进程内存空间布局分析

news2024/9/28 3:28:22

不同的数据在内存中会有不同的保存时机,和保存位置,这一节就分析这个。

当运行一个可执行文件时候,操作系统就会把这个可执行文件加载到内存;此时进程有一个虚拟的地址空间(内存空间),如下图:

代码段:装的代码

数据段,BSS段:更准确的说法是:数据段中一块是BSS段。他们两个的地址分配是有一些区别的。

数据段(.data):存储的是全局变量 和静态变量,一般是已经初始化的全局变量

BSS段:存储的是全局变量 和 静态变量 ,但是一般这个全局变量没有初始化,或者是默认给的0,"" ,nullptr

堆:

//中间空间

栈:

搞一段代码验证一下:

// 这里研究 数据段-存储的是全局变量,一般是已经初始化的全局变量
//          BBS段 - 存储的是全局变量,但是一般这个全局变量没有初始化,或者是默认给的0,"", nullptr
int *ptest = new int(120);
int g1;
int g2;
int g3 = 12;
int g4 = 32;

int g5;
int g6 = 0;

static int g7;
static int g8 = 0;
static int g9 = 10;

void mygfunc() {
	return;
}

class Teacher3 {
public:
	int m_i;
	static int m_si;//这里是声明一个static,并不是定义,声明不会分配空间
	int m_j;
	static int m_sj;
	int m_k;
	static int m_sk;
};

int Teacher3::m_si = 0;//这里才是定义,才会分配空间
void main() {

	//打印所有的地址,观察地址空间

	printf("ptest 的地址 %p\n", &ptest);
	printf("g1 的地址 %p\n", &g1);
	printf("g2 的地址 %p\n", &g2);
	printf("g5 的地址 %p\n", &g5);
	printf("g6 的地址 %p\n", &g6);
	printf("g3 的地址 %p\n", &g3);
	printf("g4 的地址 %p\n", &g4);
	printf("g7 的地址 %p\n", &g7);
	printf("g8 的地址 %p\n", &g8);
	printf("g9 的地址 %p\n", &g9);
	printf("Teacher3 静态成员m_si 的地址 %p\n", &(Teacher3::m_si));
	//printf("Teacher3 静态成员m_sj 的地址 %p\n", &(Teacher3::m_sj)); build error
	printf("全局方法 mygfunc() 的地址 %p\n", mygfunc);
	cout << "用C++的方式打印:全局方法 mygfunc() 的地址" << (void *)mygfunc << endl;
	printf("main 方法 的地址 %p\n", main);

	//  ptest 的地址 00AF4318 //有初始化的全局变量,BSS
	//	g1 的地址 00AF42E8   //没有初始化的全局变量  BSS
	//	g2 的地址 00AF42EC  // 没有初始化的全局变量 BSS
	//	g5 的地址 00AF42F0 // 没有初始化的全局变量  BSS
	//	g6 的地址 00AF42F4 // 初始值为0的全局变量  BSS
	//	g3 的地址 00AF4000// 有初始值的全局变量   数据段.dada
	//	g4 的地址 00AF4004 // 有初始值的全局变量  数据段.dada
	//	g7 的地址 00AF431C // 没有初始值的static  BSS 
	//	g8 的地址 00AF4320 //初始值为0的static  BSS
	//	g9 的地址 00AF4008 //初始值为10的static  数据段.dada
	//	Teacher3 静态成员m_si 的地址 00AF42F8 // 初始值为0的static

	//	//如下三个都是方法,是在代码段放置的。
	//	全局方法 mygfunc() 的地址 00AE169A
	//	用C++的方式打印:全局方法 mygfunc() 的地址00AE169A
	//	main 方法 的地址 00AE1500
	
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是SQL,什么是MYSQL?MYSQL的架构以及SQL执行语句的过程是什么?有哪些数据库的类型?一篇文章带你弄懂!

文章目录 前言一、为什么需要数据库二、数据库的相关概念1.什么是结构化查询语言 (SQL)2.什么是数据库管理系统 (DBMS)3.什么是 MySQL 数据库 三、数据库分类1.关系型数据库&#xff08;SQL&#xff09;2.非关系型数据库&#xff08;NoSQL&#xff09; 四、MYSQL架构1.各组件功…

奇怪问题说 - 测试篇

文章目录 1.什么是软件测试2.软件测试和开发的区别3.软件测试的发展&#xff1a;4.软件测试岗位5.软件测试在不同类型公司的定位6.一个优秀的软件测试人员具备的素质6.1综合能力6.2掌握自动化测试技术6.3优秀的测试用例设计能力6.4探索性思维6.5有责任感和一定的压力 7.软件测试…

智能优化算法 | Matlab实现霸王龙优化算法(TROA)(内含完整源码)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现霸王龙优化算法(TROA)(内含完整源码) 源码设计 %%clear all clcSearchAgents_no=50; % Number of search agentsFunction_name=</

单片机11-13

目录 蜂鸣器 蜂鸣器播放按键提示音 蜂鸣器播放音乐 AT24C02&#xff08;IIC&#xff09;总线 AT24C02数据存储 AT24C02秒表&#xff08;定时器扫描按键&#xff09; DS18B20温度传感器&#xff08;单总线&#xff09; 温度显示 温度报警器 蜂鸣器 蜂鸣器播放按键提示音…

ElasticSearch7.7.1集群搭建

前言 Elasticsearch&#xff08;ES&#xff09;是一个基于Apache Lucene的分布式、高扩展、近实时的搜索引擎&#xff0c;主要用于海量数据快速存储、实时检索、高效分析的场景。通过简单易用的RESTful API&#xff0c;Elasticsearch隐藏了Lucene的复杂性&#xff0c;使得全文搜…

kali系统下多版本JDK共存

0、前言 从上周末到这周都在做RCE(Remote Command/Code Execute&#xff0c;远程命令执行或者代码执行 )相关漏洞复现&#xff0c;像log4j2漏洞在复现过程用到的JDK有特定版本要求&#xff0c;我的kali虚拟机默认是JDK11&#xff0c;而我又不希望直接删除JDK11&#xff0c;可多…

Vue2:通过代理服务器解决跨域问题

一、场景描述 现在的项目大多数是前后端分离的。Vue前端项目通过ajax去请求后端接口的时候&#xff0c;会有同源策略的限制。从而产生跨域问题。 二、基本概念 1、什么是同源策略&#xff1f; 就是前端服务和后端服务的协议名&#xff0c;IP或主机名&#xff0c;端口号不完…

Linux进程间通信(IPC)机制之一:管道(Pipes)详解

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;Nonsense—Sabrina Carpenter 0:50━━━━━━️&#x1f49f;──────── 2:43 &#x1f504; ◀️ ⏸ ▶️ …

Maven讲解

介绍 Maven是一个流行的构建工具和项目管理工具&#xff0c;它主要用于Java项目的构建、依赖管理和项目报告生成。Maven通过提供一致的项目结构、自动化的构建过程和强大的依赖管理&#xff0c;简化了项目的开发和维护过程。 下面是一些Maven的主要特点和用途&#xff1a; 项…

设计模式—行为型模式之责任链模式

设计模式—行为型模式之责任链模式 责任链&#xff08;Chain of Responsibility&#xff09;模式&#xff1a;为了避免请求发送者与多个请求处理者耦合在一起&#xff0c;于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链&#xff1b;当有请求发生时&am…

Java设计模式-外观模式(11)

大家好,我是馆长!今天开始我们讲的是结构型模式中的外观模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式,共7种设计模式。。 外观模式(Decorator Pattern) 定义 外观(Facade)模式一种通…

【活动回顾】CSDN 成都城市开发者社区年度聚会 - 圆满结束!

文章目录 前言一、活动介绍二、精彩分享内容2.1、《COC 成都社区情况和活动介绍》2.2、《2023 年你最关注的话题》2.3、《紧跟技术潮流》2.4、《2024 年抓住技术新红利》2.5、一起干饭啦2.6、合影留念 三、亚马逊云科技 User Group3.1、社区介绍3.2、持续招募3.3、微信交流群 总…

css3表格练习

1.效果图 2.html <div class"line"></div><h3>获奖名单</h3><!-- 表格 cellspacing内边距 cellpadding外边距--><table cellspacing"0" cellpadding"0" ><!-- thead表头 --><thead><tr>…

【JavaEE】网络原理: 网络编程套接字(概念)

目录 1.什么是网络编程 2.网络编程中的基本概念 2.1发送端和接收端 2.2请求和响应 2.3客户端和服务端 3.Socket套接字 4.Socket编程注意事项 1.什么是网络编程 网络编程&#xff0c;指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信 (…

程序员的平均结婚年龄

关于程序员的平均结婚年龄&#xff0c;根据之前的信息&#xff1a; 一项对全球10000名在职程序员的调查数据显示&#xff0c;程序员第一次结婚的平均年龄是39.43周岁。而在中国的部分地区&#xff0c;如北京等地&#xff0c;程序员群体中普遍反映的结婚年龄是在30岁左右。 程序…

Title: 提升大型语言模型在知识图谱完成中的性能

基本信息 论文题目: Making Large Language Models Perform Better in Knowledge Graph Completion Making Large Language Models Perform Better in Knowledge Graph Completion (arxiv.org)https://arxiv.org/pdf/2310.06671.pdf 作者: Yichi Zhang, Wen Zhang 机构: Col…

25考研政治备考计划

各位小伙伴大家好&#xff0c;今天给大家分享的是25考研政治复习备考计划。 政治没有基础阶段&#xff0c;直接就是强化&#xff0c;强化的内容也就是听课&#xff0c;刷题。 【时间安排】 *7-9月中 徐涛老师或腿姐强化课&#xff0c;推荐刷肖1000 *9月中-10月中 背腿姐的背…

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

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

Go 知识chan

Go 知识chan 1. 基本知识1.1 定义1.2 操作1.3 操作限定1.4 chan 读写 2. 原理2.1 数据结构2.2 环形队列2.3 等待队列2.4 类型消息2.5 读写数据2.6 关闭chan 3. 使用3.1 操作符使用3.2 select3.3 for-range https://a18792721831.github.io/ 1. 基本知识 chan是go里面里面提供…

应用机器学习的建议

一、决定下一步做什么 在你得到你的学习参数以后&#xff0c;如果你要将你的假设函数放到一组新的房屋样本上进行测试&#xff0c;假如说你在预测房价时产生了巨大的误差&#xff0c;你想改进这个算法&#xff0c;接下来应该怎么办&#xff1f;实际上你可以考虑先采用下面的几种…