C++底层分析

news2025/1/11 20:41:20

文章目录

  • 进程的地址空间划分
    • 用户空间
    • 内核空间
  • 程序的链接原理


进程的地址空间划分

任何的编程语言=》产生两种东西:指令和数据
程序加载到内存中,不可能加载到物理内存。
linux系统会给当前进程分配一个2^32(32位系统,4G)大小的一块空间(进程的虚拟地址空间)
在这里插入图片描述

用户空间

1、.test : 只读
代码生成指令时,指令的内存放在代码段中(.test段)

int main()
{
	int a = 12;   // 生成一条汇编指令 mov dword ptr[a]. 0Ch
	int b = 0;
	int c;   // 这时打印他为无效值
}

所以局部变量代码经过编译后生成的是指令,放在.text段中。
在这条指令运行的时候,根据指令去栈中开辟内存。

.rodata : 只读数据段

char *p = "hello world";  // 不能修改*p
现在编译器都不让普通的指针指向常量字符串,应该这么写:
const char *p = "hello world";

其中"hello world"存放在.rodata中,因为.rodata只读,所以不能修改*p。

2、.data:存放已经初始化了的值(不为0的)

int gdata1 = 10;
static int gdata2 = 20;
```cpp
int main()
{
	int static e = 12;   // 放在.data段
	int static f = 0;   // 放在.data段
	int static g;     // 放在.bss段 这时打印他为0
}

因为static在程序启动时不会初始化,等到程序运行到static

3、.bss:给未初始化的量默认值(0)。
内核自动负责将.bss段的值全部修改为0.

int gdata1 = 0;
int gdata2;
static int gdata3 = 0;
static int gdata4;

4、.heap从上往下增长

5、动态链接库 *.dll * so

6、.stack从下往上增长

7、命令行参数和环境变量

./a.ou 192.168.1.100

内核空间

ZONE_DMA
ZONE_NORMAL
ZONE_HIGHMEN

程序的链接原理

编译完成的所有.o文件+静态库文件
在这里插入图片描述

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

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

相关文章

python自动化测试selenium定位frame及iframe示例

这篇文章主要为大家介绍了python自动化测试selenium定位frame及iframe示例的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助 frame标签有frameset、frame、iframe三种,frameset和其它普通标签没有区别,不会影响正常定位&…

电脑C盘哪些文件可以删除?最全总结分享!

“怎么会这样呢?我的电脑c盘明明没东西却爆满。实在不知道应该怎么处理了。有哪位朋友知道电脑c盘哪些文件可以删除吗?快来帮帮我吧!” C盘是计算机中的系统盘,存储着操作系统和很多程序文件。在c盘中有些文件是不可以随意删除的&…

伙伴云CEO戴志康:我们为什么要做伙伴云?

分享嘉宾:戴志康,伙伴云CEO 以下为演讲实录⬇⬇⬇ 01选择人更少的一条路,从B级走向A级 我一直想和大家交流一个话题,关于我们为什么要做伙伴云。既代表我自己,同时也代表我们团队的一些想法。 我是一个怀疑论者。大…

如何助力企业DCMM贯标落地,这里有答案

DCMM作为国家第一个数据管理领域标准,是企业落实数据驱动战略、实现数字化转型的重要抓手。从行业实践来看,国内多个行业开始在全面拥抱DCMM模型,根据模型开展数据管理评估和能力提升工作。 01 什么是DCMM DCMM是国家标准《GB/T36073-2018 数…

3.15 Bootstrap 警告(Alerts)

文章目录 Bootstrap 警告(Alerts)可取消的警告(Dismissal Alerts)警告(Alerts)中的链接 Bootstrap 警告(Alerts) 本章将讲解警告(Alerts)以及 Bootstrap 所提…

vue3 使用字体 阿里巴巴矢量库字体

文章目录 下载相关文件 下载相关文件 1 输入iocnfont 找到阿里巴巴矢量库官网 2 进入字体库 选择字体 3 点击下载字体包 4 解压后 5 将下载包解压后将里面的文件一起 放到 assets 文件夹 自己创建的 字体包下面。 我这里放在了 assets/typeface/number 文件夹下(你那里…

SDWAN设备监控的五大方法

SD-WAN设备的监控是确保网络运行正常的重要环节。通过监控SD-WAN设备,您可以实时了解网络的性能、可用性和安全性,并采取必要的措施来解决问题。以下是一些常见的SD-WAN设备监控方法和工具: 1.设备管理界面:大多数SD-WAN设备都提…

132、仿真-基于51单片机主从串口通信家用防盗报警器设计(程序+Proteus仿真+流程图等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、设计功能 二、Proteus仿真图​编辑 三、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&#xff1…

建筑结构健康监测,护航建筑结构安全稳定

摩天大楼通常是一个城市经济发展的象征,也是一个城市的标志性景观和地标,是展示城市形象的亮丽名片,我国在超高层建筑领域总体上已达到国际先进水平,统计数据显示,截至2020年4月,全世界最高的20座建筑物有1…

Vue教程(一):Vue核心

Vue教程(一):Vue核心 1.1 Vue简介 1.1.1 Vue是什么? 一套用于构建用户界面的渐进式JS框架。 1.1.2 谁开发的? ——尤雨溪。 2015-10-27 正式发布 Vue1.0.0 Evangelion(新世纪福音战士)2016-10-1 正式发布 Vue 2.…

【苹果日历推送】群发部署开发工具、SDK或框架,如APNs推送服务的HTTP/2接口

苹果日历本身并不直接支持群发推送通知,因为推送通知是针对单个设备的。如果你想向多个用户发送推送通知,你需要在自己的应用中实现推送功能,然后针对每个设备单独发送推送通知。 以下是实现推送通知的一般步骤: 开发推送服务&a…

【产品设计】通用后台管理系统需求及原型设计

后台管理系统,会根据不同公司、不同业务的要求做出改变。 网上很多系统的参考多数为业务中台,过于带有业务色彩。做过三四个后台管理系统,从中总结了一个通用的功能和需求设计模版,供大家参考。本文适用于0-2岁的产品经理做基础功…

如何用Jmeter做性能测试

目录 性能测试的概念 性能测试类型 性能测试应用场景(领域) 性能测试常用的指标 性能测试流程 需求分析 搭建测试环境 测试场景设计 测试用例设计和脚本开发 测试数据准备 性能测试执行和管理 性能测试结果分析与调优 测试报告和跟踪 性能测…

头版!《大同日报》和《大同晚报》报道大同互联网职业技术学院建设进程

近日,传智黑马主办的全日制统招大学——大同互联网职业技术学院备受关注,继前几日大同电视台采访我校,《大同日报》和《大同晚报》又在头版头条对我校的工程建设情况进行了详实报道。作为2023年省市两级重点工程项目,报道对我校在…

存量市场下,雅迪的高端化之路举步维艰?

为了让自家的高端产品成功“突围”,雅迪在营销上无所不用其极。 继在央视大楼高调发布后,近日雅迪冠能探索E10完成了力战70吨游艇、无惧24吨雨水冲刷、制霸百公里全地形等极限挑战,“树立起新一代两轮电动车豪华标杆旗舰”。 图源&#xff1…

cjson坑系列二cJSON_AddStringToObject、cJSON_AddItemToObject申请内存失败

在使用cjson的时候遇见这样一个问题(先看问题代码,如下) void platform_set_matrix_by_udp(cJSON* para, const char* str) {char* chintstr NULL, * intstr NULL;cJSON* index, * val;int ch;char* matrix;int number 0;int rows[8] { …

数仓学习---8、数仓开发之ODS层

星光下的赶路人star的个人主页 大鹏一日同风起,扶摇直上九万里 文章目录 一、数仓开发之ODS层1.1 日志表1.2 业务表1.2.1 活动信息表(全量表)1.2.2 活动规则表(全量表)1.2.3 一级品类表(全量表)…

测试开发面试你需要知道的

面试前的准备: 1.简历优化 选择一个比较简洁明了的模板,简历中突出自己的技能和项目经验,项目经历最好按照时间倒叙阐述,描述清自己在项目中承担的职责,在这个职责中做的一些过程改进,效率提升的内容&…

【ChatGLM】在电脑部署属于自己的人工智能/ChatGPT平替/可离线/可发布

【ChatGLM】在电脑部署属于自己的人工智能 1、 前言 本文能实现在自己的电脑或云服务器上部署属于自己的语言AI——ChatGLM-6B,可以离线使用,也可以生成web网页在线发给朋友尝试。 ChatGLM-6B 是一个由清华大学的团队开源的、支持中英双语问答的对话语…

Spring Batch之读数据库—JdbcPagingItemReader(四十一)

一、JdbcPagingItemReader Spring Batch框架提供了对JDBC分页读取支持的组件JdbcPagingItemReader。JdbcPaginItemReader实现ItemReader接口,核心作用是将数据库中记录通过分页的方式转换为Java对象。在JdbcPagingItemReader将数据库记录转换为Java对象是主要有两步…