GCC背后的故事C程序常量变量的地址分配

news/2025/10/8 0:46:01/文章来源:https://www.cnblogs.com/dshuidawsud/p/19128981

1.GCC背后的故事
(一)准备工作
我们先打开Ubuntu系统,用mkdir命令创建一个新的文件夹来存放程序文件。然后通过vim命令编写一个简单的c语言程序文件helloworld.c。

屏幕截图 2025-10-07 202643

屏幕截图 2025-10-07 202919
(二)编译过程
1.预处理
预处理过程的完整流程:

  1. 字符集转换:处理源代码的字符编码
  2. 续行符处理:将反斜杠换行符连接为单行
  3. 注释删除:移除所有注释
  4. 宏展开:展开所有宏定义
  5. 条件编译:处理条件编译指令
  6. 头文件包含:插入包含的文件内容
  7. 特殊标记:添加行号和文件名信息
  8. 输出结果:生成预处理后的文本文件
    通过预处理,原始的C源代码被转换为不包含预处理指令的纯C代码,为后续的编译阶段做好准备。
    使用gcc进行预处理的命令如下:

屏幕截图 2025-10-07 205616
2.编译
预处理之后的编译阶段时将预处理生成的.i文件转换为汇编代码的过程。这是整个汇编过程的核心阶段。其主要任务为词法分析,语法分析,语义分析,中间代码生成,代码优化以及最后生成目标代码。
具体通过gcc命令实现该操作如下:

屏幕截图 2025-10-07 210045
通过上述命令生成的汇编代码如下所示:

屏幕截图 2025-10-07 222028
3.汇编
汇编阶段是将汇编代码转换为机器可执行的二进制目标代码的过程。这是将人类可读的汇编语言翻译成机器指令的关键步骤。汇编阶段的主要任务为指令翻译,符号解析,地址分配。
通过gcc命令实现汇编的操作如下:

屏幕截图 2025-10-07 210305
或者可以使用as命令进行汇编操作:

屏幕截图 2025-10-07 210526
4.链接
链接阶段是将多个目标文件(.o)和库文件组合成一个可执行文件或库文件的过程。这是编译过程的最后一步,解决了符号引用和地址重定位问题。链接阶段的主要任务为符号解析(解析所有未定义的符号引用),地址重定位(为代码和数据分配最终的内存地址),库链接(链接所需的静态库和动态库)。链接阶段完成后,就生成了可以直接在操作系统上运行的可执行文件。
使用特定的gcc命令可以链接动态库生成可执行文件,生成的ELF可执行文件的大小和链接的动态库如下所示:

屏幕截图 2025-10-07 210940
使用特定的gcc命令可以链接静态库生成可执行文件,生成的ELF可执行文件的大小和链接的静态库如下所示:

屏幕截图 2025-10-07 211144
(三)分析ELF文件

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

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

相关文章

RenderWare 会根据摄像机距离选择合适的 LOD。

RenderWare 会根据摄像机距离选择合适的 LOD。1️⃣ 基本概念Atomic(RpAtomic):RenderWare 最小渲染单位,可以理解为一个模型实例。LOD(Level of Detail):根据距离或屏幕占比,选择不同精度的几何体渲染,优化性…

网站快速注册ui设计流程培训网站

Widget widget存储视图的配置信息,没有状态所以是不可变的,每个绘制周期(帧率),widget都不会刷新,而是会被重建。 StatelessWidget和StatefulWidget - - - 怎样判断是需要更新element,还是替换…

LOD 的概念

LOD 的概念1️⃣ LOD 的概念 LOD(Level of Detail,细节等级) 是计算机图形学中常用的一种性能优化技术,其核心思想是:根据物体与摄像机的距离、屏幕占比或视角的重要性,动态选择不同精度的模型或材质,以减少渲染…

网站模板之家免费模板大流量网站 优化

部分网站通过Http头中的User-Agent判断浏览器类型,如果是手机,显示手机版页面内容,如果是普通PC浏览器,显示电脑版网页内容。 因此谷歌Chrome浏览器,可以通过修改User-Agent和页面分辨率模拟手机浏览器访问网页。如iPh…

重庆做腋臭骑士网站做谷歌推广一个月赚10万

本文介绍的是 PointNet 作者的博士论文:3D场景理解中的点云深度学习。从上图可以看到,整个博士论文主要贡献有两块:一是点云深度学习的网络架构(PointNet 和 PointNet);二是在3D场景理解中的应用&#xff0…

龙芯是被gcc正儿八经支持的

截图来自皮卡鱼的Makefile, which应该是从著名的国际象棋引擎Stockfish改过来的:修改最底层的棋盘棋子表示,搜索和NNUE部分不用大改。 AI说:43MB的NNUE文件,其模型规模可能属于轻量级范围(约数百万参数),对应的…

python程序设计课程练习题

前言 这是一份python程序设计课程的练习答案,题目来源于https://www.dotcpp.com/team/2526 各位同学,我想对同学们说的是比起死记硬背代码,老师更希望同学们能锻炼自己的思维逻辑,开发提升智力,切记不要死记硬背代…

世界对象是 RenderWare 场景的核心

世界对象是 RenderWare 场景的核心enderWare 世界(World)模块的 API 声明,主要提供了操作场景世界(RpWorld)、扇区(RpWorldSector)、以及全局/局部光源、材质、模型等的接口。下面帮你梳理它的用途和结构:1️⃣…

北京正规网站建设单价群晖自行安装wordpress

文章目录1. 题目2. 解题1. 题目 描述 给你一个整数数组 nums 和一个正整数 threshold ,你需要选择一个正整数作为除数,然后将数组里每个数都除以它,并对除法结果求和。 请你找出能够使上述结果小于等于阈值 threshold 的除数中 最小 的那个…

IEEE754浮点格式与解析

0 前言 在完成学校RM嵌入式软件组的作业时遇到了一个问题:将0x00,0x00,0x20,0x40这四个十六进制数据根据一定规则变为浮点数2.5f,我询问AI得知这与IEEE754的浮点数存储规则有关,这篇随笔就来记录一下。 1.IEEE 754简…

国庆 Day3 强基数学

复数、不等式、方程、代数恒等变形……复数 四种基本表示形式:代数、三角、向量(几何法)、指数(基本同三角)。 一个重要公式:\(|z|^2=z\cdot z(共轭)\)。Trick 1:利用 \(-1=i^2\) 进行代数变形。Eg:\(z^2-2z+2…

制作网站公司 英语网站首页目前主要的网络营销方式

文章目录 前言一、设计框图二、GT_module三、PHY_module3.1、PHY_tx模块3.2、PHY_rx_bitsync模块3.3、PHY_rx模块 四、上板测试 前言 有了对64B66B协议的认识以及我们之前设计8B10B自定义PHY的经验,本文开始对64B66B自定义PHY的设计 一、设计框图 二、GT_module …

网站页面布局模板工业互联网平台首先要提高数据的挖掘能力

[vue] 你知道vue的模板语法用的是哪个web模板引擎的吗?说说你对这模板引擎的理解 模板引擎: 负责组装数据,以另外一种形式或外观展现数据。 优点: 可维护性(后期改起来方便); 可扩展性&#…

学校建设门户网站的好处营销型网站建设一般要多少钱

常用音频接口:TDM,PDM,I2S,PCM_tdm音频_沙漠的甲壳虫的博客-CSDN博客 I2S/PCM接口及音频codec_音频pcm接口模块设计-CSDN博客 2个TDM8功放调试ing_周龙(AI湖湘学派)的博客-CSDN博客 数字音频接口时序----IIS、TDM、PCM、PDM_td…

wordpress点赞排行榜宁波seo智能优化

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

py网站开发视频教程网站开发文献资料

字典的每个键值对用冒号分割,键值对之间用逗号分隔,所有键值对包括在{}中。d {key1 : value1, key2 : value2 }键必须是唯一的,值可以不唯一。值可以取任何数据类型,但键必须是不可变对象,如字符串,数字或…

公司网站制作机构邢台做网站的

阅读目录一 数学定义的函数与python中的函数初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把…

网站建设代码排版出错app订制

python操作文件 open的常用参数: 1.要读取的文件名字或者文件路径 2.文件打开的模式 r:只读模式 rb:以二进制的格式去打开文件 3.encoding:用来指定文件的编码格式(使用rb的时候,不需要加该参数) #打…

山东省建设工程注册中心网站英文网站建设哪家好

electron 静默下载文件 cooljser 2020-12-24 electron 上传、下载文件是一个很常用的功能,在 electron 中我们不但可以实现和 h5 一样的下载,也可以实现静默下载,让用户无感知。官方的做法是通过mainWindow.webContents.downloadURL(url)来…

宁波建设工程检测行业协会网站汽车企业管理系统

由于原本的数据库命名不规范,需要进行重新命名,最终确定方案为新建数据库后迁移表,以下为脚本。 #!/bin/bashecho -e "\033[34m 此脚本功能为修改数据库名称(需要新建数据库后将数据迁移到新数据库),…