高级语言源程序转换为可执行目标文件

news2024/11/29 5:43:50

将高级语言源程序转换为可执行目标文件的过程通常包括以下几个主要步骤:

 

​ 1. 预处理(Preprocessing):

由谁完成预处理器(cpp)
操作处理源代码中的预处理指令(如宏定义、文件包含、条件编译等)。
结果生成一个纯净的源文件,去除了所有的预处理指令。

1. 预处理(Preprocessing)

​ • 宏替换:将宏定义替换为具体的代码。

​ • 文件包含:将包含的头文件内容插入到源文件中。

​ • 条件编译:根据条件编译指令选择性地编译代码片段。

 

​ 2. 编译(Compilation):

 

由谁完成编译器(ccl)
操作将预处理后的源代码转换为汇编代码。这一步包括词法分析、语法分析、语义分析和优化。
结果生成汇编代码文件(通常扩展名为 .s 或 .asm)

2. 编译(Compilation)

​ • 词法分析:将源代码分解为记号(tokens)。

​ • 语法分析:根据语法规则构建语法树(parse tree)。

​ • 语义分析:检查语法树的语义正确性。

​ • 中间代码生成:将语法树转换为中间代码(通常是某种中间表示形式)。

​ • 优化:对中间代码进行优化,提升代码执行效率。

​ • 目标代码生成:将优化后的中间代码转换为目标平台的汇编代码。

 

​ 3. 汇编(Assembly):

 

由谁完成汇编器(as)
操作将汇编代码转换为目标代码(机器代码)。
结果生成目标文件【二进制】(通常扩展名为 .o 或 .obj),包含机器码和一些重定位信息。

3. 汇编(Assembly)

​ • 汇编代码翻译:将汇编指令转换为机器指令。

​ • 符号表:建立符号表,用于记录变量、函数等符号的地址信息。

​ • 重定位信息:生成重定位信息,以便在链接时进行地址调整。

 

​ 4. 链接(Linking):

由谁完成链接器(ld)
操作将一个或多个目标文件和所需的库文件链接在一起,解决符号引用(如函数和变量),生成一个完整的可执行文件。链接器还会处理重定位和地址分配。
结果生成可执行文件【二进制】(通常扩展名为 .exe 或没有扩展名)。

每个步骤具体的细节如下:

4. 链接(Linking)

​ • 符号解析:解析和解决各目标文件和库文件中的符号引用。

​ • 地址分配:为各个目标模块分配内存地址。

​ • 重定位:调整代码和数据中的地址引用,使之符合最终的内存布局。

​ • 生成可执行文件:将所有目标文件和库文件的代码和数据合并,生成最终的可执行文件。

在这个过程中,编译器、汇编器和链接器协同工作,将高级语言源程序一步步转换为能够在特定平台上运行的机器代码。

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

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

相关文章

k8s 1.28.2 集群部署 harbor v2.11.1 接入 MinIO 对象存储

文章目录 [toc]提前准备什么是 HarborHarbor 架构描述Harbor 安装的先决条件硬件资源软件依赖端口依赖 Harbor 在 k8s 的高可用Harbor 部署Helm 编排YAML 编排创建 namespace导入镜像部署 Redis部署 PostgreSQL部署 Harbor core部署 Harbor trivy部署 Harbor jobservice部署 Ha…

《Sui区块链:重塑去中心化应用的新星与未来潜力》

目录 引言 一、Sui 1、 技术架构 2、 编程语言 3、Move起源 4、Move的几个关键点: 5、Move 智能合约编程语言 6、智能合约编程语言可以做什么 7、和其他编程语言有什么不同 8、 安全性 9、开发者体验 10、生态系统 11、 未来发展 总结 引言 在区块链技…

AIGC助力小学生编程梦:C++入门不再难!

文章目录 一、AIGC时代下的编程教育新趋势二、小学生C入门趣味编程的意义三、小学生C入门趣味编程的实践策略四、面临的挑战与应对策略五、AIGC技术在小学生C编程中的应用与前景《小学生C趣味编程从入门到精通》编辑推荐内容简介作者简介目录 随着人工智能生成内容(…

基于百度智能体开发爱情三十六计

基于百度智能体开发爱情三十六计 文章目录 基于百度智能体开发爱情三十六计1. 爱情三十六计智能体2. 三十六计开发创意3. 智能体开发实践3.1 基础配置3.2 进阶配置3.3 调优心得3.4可能会遇到的问题 4. 为什么选择文心智能体平台 1. 爱情三十六计智能体 爱情三十六计 是一款基于…

DORA 机器人中间件学习教程(6)——激光点云预处理

文章目录 1 移植思路2 代码输入输出说明3 编写CmakeList.txt文件4 编写yml文件5 编译并启动节点参考资料 在DORA中通过驱动获取激光雷达数据后,激光点云预处理部分代码是参考了autoware官方代码并对其进行裁剪得到的,点云预处理主要包含三个节点&#xf…

vue3项目使用百度地图实现地图选择功能代码封装(开箱即用)

vue3项目使用百度地图实现地图选择功能代码封装方案(开箱即用) <template><div class="bmapgl">

音视频入门基础:FLV专题(15)——Video Tag简介

一、引言 根据《video_file_format_spec_v10_1.pdf》第75页&#xff0c;如果某个Tag的Tag header中的TagType值为9&#xff0c;表示该Tag为Video Tag&#xff1a; 这时StreamID之后紧接着的就是VideoTagHeader&#xff0c;也就是说这时Tag header之后的就是VideoTagHeader&…

MySQL常用命令大全

博客主页&#xff1a;长风清留扬-CSDN博客系列专栏&#xff1a;MySQL入门到入魔每天更新大数据相关方面的技术&#xff0c;分享自己的实战工作经验和学习总结&#xff0c;尽量帮助大家解决更多问题和学习更多新知识&#xff0c;欢迎评论区分享自己的看法感谢大家点赞&#x1f4…

windows mysql 8.0版本重置root密码

1.停止mysql服务 以管理员运行cmd 2.安全模式启动 mysqld --console --skip-grant-tables --shared-memory 3.修改密码 再开个cmd窗口就可以进入了&#xff1a;mysql 先进入mysql database&#xff1a;use mysql 修改密码&#xff1a;ALTER USER rootlocalhost IDENTIFIED …

FFmpeg 4.3 音视频-多路H265监控录放C++开发二 : 18.04ubuntu安装,linux 下build ffmpeg 4.3 源码 并测试

测试环境 ubuntu 18.04 64 位&#xff0c;安装vmware and ubuntu 安装后调整 分辨率&#xff1a; 让windows 可以和 linux 互相复制黏贴 sudo apt-get autoremove open-vm-tools sudo apt-get update sudo apt-get install open-vm-tools-desktop 一直Y reboot 依赖安装 sud…

快速在找到函数的实体的方法

当我们写了许多许多的函数&#xff0c;那我们怎么快速的找到他们呢 我们只需要按下ctrl&#xff0c;在点击函数名字就可以快速的找到我们想要的函数

从Apple Intelligence到远程机器人手术:更快、更安全的网络成企业业务关键

过去&#xff0c;企业的业务模式和网络架构相对简单&#xff0c;数据传输量不大&#xff0c;远程访问需求也不多。企业对网络的要求主要集中在确保基本的连通性和可用性。如今&#xff0c;企业通过将产品与各项高新技术深度融合&#xff0c;赋予传统产品活力和竞争力。以苹果公…

C++20中头文件span的使用

<span>是C20中新增加的头文件&#xff0c;此头文件是containers库的一部分。包括&#xff1a; 1.模板类std::span&#xff1a;连续对象序列的非拥有视图(view)。std::span可以具有static extent&#xff0c;在这种情况下&#xff0c;序列中的元素数量在编译时已知并以typ…

06.队列介绍+实现

目录 一、队列的概念 二、队列的实现 1、头文件定义 2、功能函数实现 3、主函数测试 一、队列的概念 队列就像吃饭排队类似&#xff0c;先来先吃&#xff0c;先进先出。 队头&#xff1a;队列的头部。 队尾&#xff1a;队列的尾部。 入队&#xff1a;在队尾操作。 出队&…

汽车免拆诊断案例 | 2023款零跑C01纯电车后备厢盖无法电动打开和关闭

故障现象  一辆2023款零跑C01纯电车&#xff0c;累计行驶里程约为2万km&#xff0c;车主进厂反映&#xff0c;后备厢盖无法电动打开和关闭。 故障诊断  接车后试车&#xff0c;操作后备厢盖外侧、驾驶人侧及遥控钥匙上的后备厢盖开启按钮&#xff0c;可以听到后备厢盖解锁的…

Dropout为何能防止过拟合?dropout和BN 在前向传播和方向传播阶段的区别?

Dropout是一种用于防止过拟合的正则化技术&#xff0c;它通过在训练过程中随机关闭一部分神经元来降低模型的复杂度和参数数量&#xff0c;从而有效地减少过拟合的风险。 以下是dropout能够防止过拟合的几个原因&#xff1a; 减少神经元间的共适应性&#xff1a; 在训练过程中&…

Redis --- 第七讲 --- 关于事务和主从复制

一、事务的认识 redis事务和mysql的事务相似&#xff0c;但是比它的简单。 原子性、一致性、持久性、隔离性。 Redis的事务和MySQL一比就是一个弟弟。 原子性&#xff1a;Redis的事务到底有没有原子性&#xff0c;存在争议。最原本的含义&#xff0c;是吧多个操作打包到一起…

一个简单的Qt Console Application计算练习程序

初步体验Qt Creator 用途&#xff1a;练习20以内2位数乘法速算的程序 功能1&#xff1a;支持用户设定题目数量 std::cout << "请输入本次练习题目数量&#xff1a;";int numProblems 0;std::string num;std::cin >> num;try {numProblems std::stoi(…

CMOS晶体管的串联与并联

CMOS晶体管的串联与并联 前言 对于mos管的串联和并联&#xff0c;一直没有整明白&#xff0c;特别是设计到EDA软件中&#xff0c;关于MOS的M和F参数&#xff0c;就更困惑了&#xff0c;今天看了许多资料以及在EDA软件上验证了电路结构与版图的对应关系&#xff0c;总算有点收…

沧穹科技受邀出席第二届空间信息产业无锡创新发展大会暨软件定义卫星技术大会

10月9日&#xff0c;第二届空间信息产业无锡创新发展大会暨软件定义卫星技术大会在江苏省无锡市隆重举行。沧穹科技荣幸受邀参加这一行业盛事&#xff0c;公司董事长陈锐志教授出席本次会议。 在大会产品展示环节&#xff0c;沧穹科技展示了其自主研发的室内定位解决方案领域的…