编译和链接

简介: 编译和链接

前言


       当我们写完代码后,将代码运行起来需要翻译环境和运行环境,

翻译环境又分为编译和链接,编译又分为预处理,编译,汇编,



一个C语言的项目可能有多个.c文件构成,多个.c文件分别进行编译生成目标文件,最后通过链接器链接在一起,生成可执行程序


翻译环境


预处理

在预处理阶段,源文件和头文件会被处理为.i结尾的文件

预处理阶段主要处理源文件中的预编译指令,以#开头的指令就是预编译指令,在预处理阶段都会处理掉,展开头文件,将注释用空格替换,

编译

编译的过程就是将预处理后的文件进行进一步的词法分析,语法分析,语义分析及符号汇总,生成相应的汇编代码文件,也就是将C语言的代码转化成汇编代码,生成.s为后缀的文件

汇编

汇编就是把汇编代码转化成可执行的二进制文件,汇编器是将汇编代码转变成机器可执行的指令,每一个汇编语句几乎都对应一个机器指令,形成符号表,生成.o为后缀的文件

链接

链接过程主要包括:地址和空间分配,符号决议和重定位等步骤,链接是一个比较复杂的过程,大致来说就是把多个.o文件链接起来,也可以链接第三方库中的文件,生成可执行文件,

链接过程包括合并段表,符号表的合并和重定位

运行环境


1.程序必须载入到内存中,在有操作系统的环境中,这个一般由操作系统完成。在独立的环境中,程序的载入必须由手动安排,


2.程序的执行便开始,接着调用main函数,


3. 开始执⾏程序代码。这个时候程序将使⽤⼀个运⾏时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使⽤静态(static)内存,存储于静态内存中的变量在程序的整个执⾏过程⼀直保留他们的值。

4. 终⽌程序。正常终⽌main函数;也有可能是意外终⽌。

相关文章
|
存储 缓存 Oracle
常识四堆外内存
常识系列,作为一名互联网门外汉的科普系列 堆外内存除了在像netty开源框架中,在平常项目中使用的比较少,在现前的项目中,QPS要求高的系统中,堆外内存作为其中一级缓存是相当有成效的。所以来学习一下,文中主要涉及到这三分部内容 1. 堆外内存是什么?与堆内内存的区别 2. 怎么分配,与GC的影响 3. 开源框架使用 这篇文章写到最后,发现还只是回答了开源框架OHC的Why not use ByteBuffer.allocateDirect()?
1925 1
常识四堆外内存
|
SQL 安全 网络协议
命令执行/SQL盲注无回显外带方式
命令执行/SQL盲注无回显外带方式
822 0
|
6月前
|
存储 JavaScript Java
阿里云99元服务器:2核2G3M带宽,续费同价,购买和使用场景主要问题解答
阿里云99元云服务器,配置为经济型e实例2核2G3M带宽40G ESSD Entry云盘,凭借超低价格和续费同价的优惠,成为个人开发者、初创企业和学生的热门之选。该服务器不仅配置满足基础需求,如个人博客、小型网站等,还提供了长达三年的价格保障。用户在购买时需注意限购政策,确保资格匹配,并根据需求选择合适的地域。
|
缓存 移动开发 Rust
前端构建工具 Mako 开源了
Hi,我是 sorrycc,Mako 的主要负责人之一,也是 Umi、Dva、Father 等库的作者。 很开心,Mako 终于开源了! Github 地址:https://github.com/umijs/mako/ 今天和大家正式介绍下他。
1223 4
|
9月前
|
前端开发 JavaScript 测试技术
构建可维护的前端架构:从混乱到清晰的演进之路
在现代 Web 开发中,前端工程的复杂度正以前所未有的速度增长。从简单的 jQuery 脚本到如今基于 React、Vue 或 Svelte 的大型应用,开发者不仅要关注功能实现,更要思考如何构建一个可维护、可扩展、可测试的前端架构。本文将探讨如何从“能跑就行”的代码演进为结构清晰、职责分明的前端系统。
|
9月前
|
Java Maven 数据安全/隐私保护
Nexus仓库
Nexus仓库是Sonatype推出的开源制品管理工具,支持Maven、Npm、Docker等格式。本文介绍其在Linux和Docker环境下的安装配置,包括JDK部署、OSS版下载、用户权限、匿名访问设置,以及仓库创建与上传下载操作,涵盖密码重置、数据持久化及脚本批量导入等内容,助力搭建高效私有仓库。
|
机器学习/深度学习 算法 数据挖掘
【2024 华数杯 国际数学建模竞赛】B题 Photovoltaic Power光伏发电 34页论文及python 代码
本文通过建立数学模型和应用多种数据分析方法,研究了中国电力供应与光伏发电的发展趋势、光伏电站建设的可行性、中国光伏发电的最大潜力、清洁能源替代燃煤发电的可能性,以及光伏发电在实现国家碳中和战略目标中的作用,并提出了相关政策建议。
541 4
【2024 华数杯 国际数学建模竞赛】B题 Photovoltaic Power光伏发电 34页论文及python 代码
|
12月前
|
JSON 缓存 供应链
电子元件 item_search - 按关键字搜索商品接口深度分析及 Python 实现
本文深入解析电子元件item_search接口的设计逻辑与Python实现,涵盖参数化筛选、技术指标匹配、供应链属性过滤及替代型号推荐等核心功能,助力高效精准的电子元器件搜索与采购决策。
|
SQL 数据采集 数据可视化
Pandas 数据结构 - DataFrame
10月更文挑战第26天
1122 2
Pandas 数据结构 - DataFrame