目录

  • 1 C程序的执行流程
  • 2 翻译环境
    • 2.1 预编译
    • 2.2 编译
      • 2.2.1 词法分析
      • 2.2.2 语法分析
      • 2.2.3 语法分析
    • 2.3 汇编
    • 2.4 链接

1 C程序的执行流程

用户编写好的C程序不能直接被计算机识别并执行,在执行前,要先将源文件和头文件进行编译,生成目标文件,再将目标文件与链接库进行链接,生成最终的可执行程序,再由计算机执行
其中,将源代码转换成可执行的机器指令的过程被称为 翻译环境
执行代码的过程被称为 执行环境
在这里插入图片描述

在这里,主要说明翻译环境所做的事情

2 翻译环境

翻译环境主要有 编译和链接 两个处理过程
编译的过程还可以拆分为 预编译,编译,汇编 三个小的过程
因此,翻译环境的处理过程为 预编译,编译,汇编,链接
在这里插入图片描述

2.1 预编译

预编译阶段所做的事情包括:

  • 在代码中,将 #define 定义的常量用它的值进行替换
  • 将头文件引入至 #include 的位置处
  • 处理条件编译指令,比如:#if,#ifdef,#elif等
  • 删除程序内的所有注释
  • 生成行号和文件名
  • 保留 #pragma 的编译器指令

预编译阶段结束后,会产生 .i 后缀的文件

2.2 编译

编译阶段所做的事情包括 词法分析,语法分析,语义分析及优化
编译结束后,会产生 .s后缀的文件,它保存的都是汇编代码
接下来,针对下面这句代码来进行说明

array[index] = (index+4)*(2+6);

2.2.1 词法分析

在词法分析中要做的事情就是分析代码,将代码拆分成符号
上方的这句代码,就可以做这样子的拆分:
在这里插入图片描述

2.2.2 语法分析

在语法分析中要做的事情是分析词法分析阶段产生的符号,从而得到语法树
上面这句代码的语法树如下:
在这里插入图片描述

2.2.3 语法分析

语法分析要做的事情就是根据语法树来判断正在分析的代码是否有语法错误,因此,如果有语法错误,会在这个阶段报错
在这里插入图片描述

2.3 汇编

汇编阶段要做的事情就是将 编译阶段产生的 .s后缀文件进行解析,生成 .o/.obj 后缀的目标文件,在目标文件内,保存了机器指令,机器指令为计算机可以识别并执行的指令

2.4 链接

每一个源文件,在经过了 预编译,编译,汇编 的过程后,都会生成 .o/.obj 后缀的目标文件,在链接的阶段,就会将这些目标文件链接在一起,生成可执行程序
链接主要有 空间分配,符号决议,重定位 这些过程

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

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

相关文章

Flink-1.19.0源码详解9-ExecutionGraph生成-后篇

《Flink-1.19.0源码详解8-ExecutionGraph生成-前篇》前篇已从Flink集群端调度开始解析ExecutionGraph生成的源码,解析了ExecutionGraph的ExecutionJobVertex节点、ExecutionVertex节点、IntermediateResult数据集、IntermediateResultPartition数据集分区与封装Task…

19、阈值分割+blob分析

目录 一、仿射变换 1.变换矩阵 2.在矩阵的基础上添加各种变换形式 3.开始变换 4.计算变换矩阵参数 新算子 二、阈值分割 新算子 三、blob分析案例 1.焊点 2.石头 3.木材 4.车牌 5.骰子 新算子 一、仿射变换 1.变换矩阵 // 产生仿射变换矩阵hom_mat2d_identity…

破解 Django N+1 查询困境:使用 select_related 与 prefetch_related 实践指南

破解 Django N+1 查询困境:使用 select_related 与 prefetch_related 实践指南 开篇引入 数据库查询性能常常是 Web 应用性能瓶颈中的重中之重。Django ORM 以简洁直观的 API 层将 Python 代码与数据库打通,却也可能因默认的惰性加载带来 N+1 查询问题,造成不必要的网络往…

深入解析K-means聚类:从原理到调优实战

一、聚类分析与K-means的核心价值在无监督学习领域,聚类分析是探索数据内在结构的核心技术。​K-means算法因其简洁高效成为最广泛使用的聚类方法,在客户分群、图像压缩、生物信息学等领域应用广泛。其核心目标是将数据集划分为K个簇,实现“簇…

数据结构基础:哈希表、排序和查找算法

目录 一、哈希表 1.哈希算法 2.哈希碰撞 3.哈希表 4.哈希表相关操作 哈希表插入 哈希表遍历 元素查找 哈希表销毁 二、排序算法 1. 排序算法对比 2. 排序算法实现 冒泡排序 选择排序 插入排序 希尔排序 快速排序 三、查找算法 1. 查找算法对比 2. 查找算法实…

Linux内核参数调优:为K8s节点优化网络性能

在高并发微服务环境中,网络性能往往成为K8s集群的瓶颈。本文将深入探讨如何通过精细化的Linux内核参数调优,让你的K8s节点网络性能提升30%以上。引言:为什么网络调优如此重要?作为一名在生产环境中维护过数千节点K8s集群的运维工程…

全家桶” 战略如何重塑智能服务标准?无忧秘书 AI + 智脑 + 数字人协同模式的底层架构解析

在数字化浪潮的推动下,企业对智能化服务的需求日益增长。然而,单一的技术或产品往往难以满足复杂场景下的多样化需求。近年来,“全家桶”战略成为科技行业的一大趋势,通过整合多维度技术与服务,为企业提供全方位的支持…

前端后端之争?JavaScript和Java的特性与应用场景解析

一、名字相似,本质迥异 1.1 历史渊源与命名背景 在编程世界中,很少有两种语言像JavaScript和Java这样,仅仅因为名字的相似性就引发了无数初学者的困惑。然而,这种相似性纯属巧合——或者说是一种营销策略的产物。 JavaScript诞…

【文献分享】Machine learning models提供数据和代码

数据输入及前期信息:ChronoGauge 需要一个基因表达矩阵,其中包括来自多个时间进程 RNA-测序实验的观测数据,用于训练,并且需要有关每个基因在连续光照(LL)条件下经过光暗(LD)周期调整…

PHP MySQL Delete 操作详解

PHP MySQL Delete 操作详解 引言 在Web开发中,数据库是存储和管理数据的重要工具。PHP作为一种流行的服务器端脚本语言,与MySQL数据库结合使用可以高效地处理数据。本文将详细介绍PHP中如何使用DELETE语句删除MySQL数据库中的数据。 什么是DELETE语句&am…

计组-大/小端存放区别

在计算机系统中,大端存放(Big-Endian)和小端存放(Little-Endian)是两种不同的多字节数据存储方式,主要区别在于字节在内存中的排列顺序。理解它们对底层编程(如网络通信、二进制文件处理、硬件交…

线程同步相关知识

文章目录一、线程同步的核心目标二、线程安全的判定条件三、同步方式一:synchronized 关键字1. 同步代码块2. 同步方法四、锁的释放与不释放场景1. 自动释放锁的场景2. 不会释放锁的场景五、同步方式二:ReentrantLock(显式锁)1. 核…

Armoury Crate无法通过BIOS卸载

设备:天选4 Armoury Crate窗口反复弹出影响使用体验,但无法通过BIOS关闭该怎么办?本文以天选4为例提供解决方案。 Step1:进入服务支持官网 Armoury Crate-服务支持 下滑点击”查看更多” 下载安装卸载工具 得到Armoury_Crate_Un…

如何将视频转为GIF格式,3大视频转为GIF工具

在社交媒体和即时通讯盛行的当下,GIF 动图以其独特的魅力备受青睐。它能够生动地捕捉视频中的精彩瞬间,凭借体积小巧、无需复杂加载且可循环播放的特性,成为了人们在网络交流中表达情感、分享趣事的得力工具。无论是制作诙谐幽默的表情包&…

开发避坑指南(22):Vue3响应式编程中this绑定机制与解决方案

错误信息 TypeError: Cannot read properties of undefined (reading find) TypeError: r.vnode.el.querySelector is not a function报错背景 vue2项目升级到vue3后,原来的代码报错。 报错代码computed: {/** 计算列的显示与隐藏*/columnVisible() {return functio…

AI学习笔记三十五:实时传输视频

若该文为原创文章,转载请注明原文出处。 目的是实现视频的传输,只是个demo. 程序分为两部分,视频接收端和视频发送端。 一、视频接收端流程分析 主要流程: 初始化配置: 设置UDP端口(5001)和缓…

【ArcGIS】分区统计中出现Null值且Nodata无法忽略的问题以及shp擦除(erase)的使用——以NDVI去水体为例

需求 已有某地NDVI栅格、行政区shp以及水体shp,计算每个行政区的平均NDVI 问题 1.如果不剔除水体 负值NDVI会把平均值拉低 且水体NDVI并不全为负 需要通过shp剔除,Mask掩膜是提取水体本身而不是剩余部分 2.使用分区统计工具(Zonal statis…

Linux中的内核同步源码相关总结

什么是内核同步Linux 内核同步是指内核中用于解决并发执行单元(如进程、中断、内核线程等)对共享资源(如全局数据结构、硬件寄存器、链表等)的竞争访问的一系列机制和技术。其核心目标是保证多个并发单元在操作共享资源时的数据一…

WORD接受修订,并修改修订后文字的颜色

在 Word 中,接受修订之后默认会采用正文的默认字体格式,不会保留修订时设置的颜色,比如“插入内容是蓝色字体”的设置会被清除。 如果你想要做到:✅ 接受所有修订后仍然让“原插入的文字”变为蓝色字体保留下来你只能通过一些手动…

行业速览:中国新能源汽车市场格局与关键趋势

在全球汽车产业迈向绿色、低碳、智能化的变革浪潮中,新能源汽车已成为各国争夺的战略高地。中国,作为全球最大的汽车市场和新能源汽车制造国,正以强大的市场规模、完整的产业链体系以及快速提升的技术创新能力,在这场变革中不断加…