当前位置: 首页 > news >正文

编译链接(Compile Link)

文章目录

  • 前言
  • 一、翻译环境
    • 1、概念
    • 2、翻译环境的组成
    • 3、什么是编译链接?
  • 二、编译
    • 1、编译的阶段
    • 2、预编译
    • 3、编译
      • 1、什么是语法分析?
      • 2、什么是词法分析?
      • 3、什么是语义分析?
      • 4、什么是符号汇总?
    • 4、汇编
      • 1、符号表展示
  • 三、链接
      • 1、什么是段表?
      • 2、段表的合并
      • 3、符号表的合并和重定位
  • 总结


前言

在ANSI C的任何一种实现中,存在两个不同的环境。
第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。
第2种是执行环境,它用于实际执行代码。
接下来我们就来讲解 翻译环境


一、翻译环境

1、概念

计算机可以识别二进制指令,而我们写的代码时文本信息,计算机无法识别,需要翻译环境进行翻译后,计算机才能识别运行。

2、翻译环境的组成

翻译环境由编译和链接两部分组成

3、什么是编译链接?

如下图所示:

在这里插入图片描述

二、编译

1、编译的阶段

编译分为:
1、预编译(预处理)
2、编译
3、汇编

一共三阶段

2、预编译

VS身为集成开发环境,集成了编译器(cl.exe),链接器(link.exe)和调试器
所以VS不好演示这一过程,这里我们可以使用Linux上的gcc编译器演示

预编译处理的:
1、头文件的展开
2、注释删除
3、宏替换
这些都是文本操作,所有的预处理指令都是在预处理阶段完成的。


3、编译

编译处理的:
1、把c语言代码翻译成了汇编语言
2、语法分析
3、词法分析
4、语义分析
5、符号汇总

1、什么是语法分析?

语法分析(syntax analysis)是编译程序的核心部分,其任务是检查词法分析器输出的单词序列是否是源语言中的句子,亦即是否符合源语言的语法规则。


2、什么是词法分析?

词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。


3、什么是语义分析?

语义分析是编译过程的一个逻辑阶段, 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。比如语义分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。如有的编译程序要对实数用作数组下标的情况报告错误。又比如某些程序规定运算对象可被强制,那么当二目运算施于一整型和一实型对象时,编译程序应将整型转换为实型而不能认为是源程序的错误。


4、什么是符号汇总?

符号汇总:汇总全局变量
在这里插入图片描述
在这里插入图片描述


4、汇编

汇编所处理的:
1、把汇编代码形成二进制指令
2、形成符号表

1、符号表展示

在这里插入图片描述
在这里插入图片描述


三、链接

链接处理的:
1、合并段表
2、符号表的合并和重定位

1、什么是段表?

在分段式存储管理系统中,每个进程或程序都有一个或多个逻辑段,为使程序或称进程能正常运行,亦即,能从物理内存中找出每个逻辑段所对应的位置,在系统中为每个进程建立一张段映射表,简称段表,段表记录了进程中每一个段在内存中的起始地址(又称为 “基址” )、段号和段的长度。


2、段表的合并

在这里插入图片描述


3、符号表的合并和重定位

重定位:将无效的地址去掉
在这里插入图片描述
extern中的Add只是声明,没有明确的空间,为无效值。

总结

在这里插入图片描述

相关文章:

编译链接(Compile Link)

文章目录 前言一、翻译环境1、概念2、翻译环境的组成3、什么是编译链接? 二、编译1、编译的阶段2、预编译3、编译1、什么是语法分析?2、什么是词法分析?3、什么是语义分析?4、什么是符号汇总? 4、汇编1、符号表展示 三…...

14 幂等生产者和事务生产者

kafka消息交付可靠性保障和精确一次语义处理 消息交付可靠性保障,指的kafka对Producer和Consumer要处理的消息提供什么样的承诺。总共就三种:at most once 、at least once、axactly once kafka默认提供的是 at least once。原因是只有Broker提交消息并…...

zabbix部署与监控

目录 一、什么是zabbix? 二、zabbix 监控原理 三、Zabbix 新特性 三、Zabbix 功能组件 四、部署 zabbix zabbix的服务端部署 zabbix的客户端部署 zabbix的服务端部署 一、什么是zabbix? zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络…...

Python 编程基础 | 第五章-类 | 5.8、运算符重载

一、运算符重载 1、Python类内置方法 Python常用内置方法,如下: __init__: 构造函数,在生成对象时调用__del__: 析构函数,释放对象时使用__repr__: 打印,转换__setitem__&#xff1…...

【前端设计模式】之解释器模式

解释器模式是一种行为设计模式,它用于解释特定语言或规则的表达式。在前端开发中,解释器模式可以用于处理复杂的逻辑或规则,并将其转化为可执行的代码。 解释器模式特性 定义语言规则:解释器模式通过定义语言规则来解析和执行表…...

TiDB 7.4 发版:正式兼容 MySQL 8.0

MySQL 是全球最受欢迎的开源数据库,长期位于 DB-Engines Ranking 排行榜第二名,在世界范围内拥有数量庞大的企业用户和开发者。然而,随着时间的推移,MySQL 用户正面临新挑战。Oracle 官宣将在 2023 年 10 月终止 MySQL 5.7 版本的…...

QT 网络编程 服务端 客户端 QTcpServer

服务端的创建 //创建服务端QTcpServer对象 server new QTcpServer(this);//设置服务端,端口,这里绑定的是主机的所有网卡, server->listen(QHostAddress::Any, 8080);//绑定连接信号与槽 connect(this->server, &QTcpServer::new…...

Stm32_标准库_16_串口蓝牙模块_手机与蓝牙模块通信_手机传入信息能对芯片时间日期进行更改

实现了手机发送信息给蓝牙模块,程序对数据进行分析拆解,并更新自身数据 main.c: #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Serial.h" #include "Ti…...

137.【SpringCloud-快速搭建】

微服务框架搭建 (一)、SpringCloud-Parent1.创建一个SpringBoot项目2.导入我们的依赖 (二)、SpringCloud-API (实体类)1.创建一个SpringBoot项目2.导入我们的依赖3.创建我们的实体类 (三)、SpringCloud-dept (业务A)1.创建一个SpringBoot项目2.导入我们的依赖3.配置我们的配置信…...

计算机网络第2章-CDN(4)

视频流和内容分发网 HTTP流和DASH 在HTTP流中,视频只是存储在HTTP服务器中作为一个普通的文件,每个文件有有一个特定的URL。当用户要看视频时,客户与服务器之间创建一个TCP连接并发送HTTP GET请求。 HTTP流具有严重缺陷,即所有…...

Linux常见的指令合集

Linux指令合集 认识linuxlinux基础指令1.pwd 命令2. ls 命令3.cd 命令4. man 命令5. grep 命令6. ps 命令7. kill 命令8. netstat 命令9. date 查看当前系统时间10. echo 打印选项 -e linux文件操作指令1. mkdir 命令2. rmdir 命令3. touch 命令4. rm 命令5. mv 命令6. cp 命令…...

字符串_哈希

参考文章&#xff1a; E. Compress Words(字符串hash)_z听歌的小孩z的博客-CSDN博客 字符串哈希 - OI Wiki (oi-wiki.org) 板子&#xff1a; #include<bits/stdc.h> using namespace std; const int N2e450; typedef long long ll; const int mod1e97; typedef unsig…...

python 之enumerate()函数

文章目录 enumerate() 是 Python 中的一个内置函数&#xff0c;它用于在遍历可迭代对象&#xff08;如列表、元组、字符串等&#xff09;时同时获取每个元素的索引和值。这个函数非常有用&#xff0c;因为它允许您在迭代过程中轻松地访问元素的索引&#xff0c;而不需要手动维护…...

【LeetCode刷题(数据结构与算法)】:用队列实现栈

请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09; 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶 int pop() 移除并返回栈顶元素 int top() 返…...

“客户端到服务器的数据传递”和“服务器上的数据传递”这两种数据传递的方式的区别

“客户端到服务器的数据传递”和“服务器上的数据传递”这两种数据传递方式的主要区别如下&#xff1a; 数据的流动方向&#xff1a; 在“客户端到服务器的数据传递”中&#xff0c;数据是从客户端&#xff08;如浏览器&#xff09;流向服务器。在“服务器上的数据传递”中&…...

LCR 181 字符串中的单词反转

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;LCR 181. 字符串中的单词反转 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 倒叙遍历&#xff0c;获得每个单词的起始位置与终止位置&#xff0c;然后将每次遇到的单词插入结果中。 解题…...

百度OCR识别图片文本字符串——物联网上位机软件

一、开发背景 根据项目需求&#xff0c;我们需要完成LED显示屏实时显示歌词的效果。最优的方法是调用歌曲播放器的API获取歌词&#xff0c;但是由于这个开发资格不是很好申请&#xff0c;因此我们采用其他方案&#xff0c;即通过OCR识别获取歌词&#xff0c;并投射到LED显示屏上…...

JAVA学习(6)-全网最详细~

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…...

睿趣科技:未来抖音开网店还有前景吗

随着科技的快速发展&#xff0c;电商平台已经成为了人们生活中不可或缺的一部分。在中国&#xff0c;抖音作为一个短视频平台&#xff0c;近年来迅速崛起&#xff0c;吸引了大量的用户和商家。那么&#xff0c;在未来&#xff0c;抖音是否还能为商家提供一个有效的电商平台呢?…...

第六章 应用层 | 计算机网络(谢希仁 第八版)

文章目录 第六章 应用层6.1 域名系统DNS6.1.1 域名系统概述6.1.2 互联网的域名结构6.1.3 域名服务器 6.2 文件传送协议6.2.1 FTP概述6.2.2 FTP的基本工作原理6.2.3 简单文件传送协议TFTP 6.3 远程终端协议TELNET6.4 万维网www6.4.1 万维网概述6.4.2 统一资源定位符URL6.4.3 超文…...

insert_order 报单类型怎么选:限价、FAK 与 FOK 期货场景

前言 在天勤量化里&#xff0c;insert_order 是程序化下单的核心接口。报单类型选错&#xff0c;常见后果是撤单狂增、部分成交后敞口裸露&#xff0c;或回测里假设能成交而实盘挂在板上。下面按期货里常用的限价、FAK、FOK 等说明适用场景&#xff0c;并给出最小调用片段。 …...

避开安全门调试大坑:详解西门子SFDOOR指令的3个关键参数与常见故障复位

西门子SFDOOR指令实战排错手册&#xff1a;3个关键参数解析与故障复位技巧 1. 安全门控制的核心逻辑与典型故障模式 在工业自动化现场&#xff0c;安全门作为保护人员安全的关键设备&#xff0c;其可靠性直接关系到生产系统的稳定运行。西门子SFDOOR功能块通过双通道信号检测和…...

MATLAB许可不够用?自动回收闲置,算法开发团队告别等待

MATLAB许可证不够用&#xff1f;我来告诉你2026年最新解决方案&#xff1a;用自动回收闲许可&#xff0c;让团队飞起来&#xff01;我上周帮一家做自动驾驶算法的公司整活&#xff0c;他们2026年用的是MATLAB R2026a版本。这位老大难问题&#xff1a;20个开发席位&#xff0c;八…...

基于RAG与向量数据库的智能知识库系统构建实战

1. 项目概述&#xff1a;当AI成为你的“第二大脑”最近在折腾一个挺有意思的开源项目&#xff0c;叫IIMS-By-AI。这个名字乍一看有点唬人&#xff0c;IIMS是“Intelligent Information Management System”的缩写&#xff0c;翻译过来就是“智能信息管理系统”。但它的核心玩法…...

免费网盘直链下载助手:一站式解决九大平台文件下载难题

免费网盘直链下载助手&#xff1a;一站式解决九大平台文件下载难题 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

在Python项目中集成多模型API实现智能对话功能

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Python项目中集成多模型API实现智能对话功能 对于需要在应用中集成AI对话能力的Python开发者而言&#xff0c;直接对接多个模型厂…...

如何快速实现文献元数据智能转换:Zotero插件终极指南

如何快速实现文献元数据智能转换&#xff1a;Zotero插件终极指南 【免费下载链接】zotero-format-metadata Linter for Zotero. A plugin for Zotero to format item metadata. Shortcut to set title rich text; set journal abbreviations, university places, and item lang…...

终极Switch游戏安装指南:5分钟掌握Awoo Installer的完整教程

终极Switch游戏安装指南&#xff1a;5分钟掌握Awoo Installer的完整教程 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Switch游戏安装而烦…...

gomicro如何安装部暑

根据最新官方文档&#xff0c;以下是 go-micro&#xff08;v5 最新版&#xff09; 的完整安装与部署指南。目前最新稳定版本为 v5.16.0&#xff0c;推荐使用特定版本号安装以避免模块路径冲突。---一、环境准备 要求 说明 Go Go 1.21&#xff08;建议最新版&#xff09; …...

基于Python的自动化科研写作工具:Aut_Sci_Write架构与实现

1. 项目概述&#xff1a;一个面向科研写作的自动化工具最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Aut_Sci_Write”。光看名字&#xff0c;大概就能猜到它的核心方向&#xff1a;自动化科学写作。作为一个在科研和工程领域摸爬滚打多年的从业者&#xff0c;我深知一…...