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

预处理、编译、汇编、链接过程

预处理、编译、汇编、链接过程

预处理

引入头文件 #include

展开宏定义 #define

处理条件编译指令 #ifdef

删除注释

添加行号

在Linux下可以使用gcc -E命令把hello.c文件预处理成hello.i文件。windows这些操作都集成在编译器visual studio这些里面了。

编译

进行语法分析、词法分析、语义分析,在这里编译不过的话编译器就会报错。这一阶段会生成汇编指令文件。

汇编

(学习汇编时,比如使用masm汇编器,通过masm 指令将汇编代码文件汇编成.obj文件)

将汇编指令文件汇编成二进制指令文件,生成的.o文件就是二进制文件。机器就可以识别了。

链接

(学习汇编时,比如使用masm汇编器,通过link指令将.obj文件汇链接成.exe文件)

就是将一些.o文件和库文件链接上,包含一些函数地址、空间的分配。生成最后的可执行文件就是.exe(Windows)或.out(Linux)文件。

动态链接和静态链接

静态链接(.lib):一个大的项目由多个目标文件文件或者多个模块组成,每个模块都用到静态库的某个接口,那这个静态库在所有模块都会有一个备份。

缺点:1.浪费空间;2.另外静态库有更新的话,需要重新静态编译整个项目。

优点:相对于动态链接运行快。

动态链接(.dll):动态链接时每个模块不会加载动态库的内容,只保存一个地址,在运行时再将接口内容加载进内存进行执行。

优点:1.节约空间。2.库更新的话,不需要全部重新编译。

缺点:运行时会损失点效率。

http://www.lryc.cn/news/328911.html

相关文章:

  • 3、Cocos Creator 节点和组件
  • 【js刷题:数据结构数组篇之长度最小的子数组】
  • 大话设计模式之装饰模式
  • 国赛大纲解读
  • 设计模式(5):原型模式
  • 【React】vite + react 项目,进行配置 eslint
  • Windows入侵排查
  • C语言每日一题
  • TheMoon 恶意软件短时间感染 6,000 台华硕路由器以获取代理服务
  • 人脸68关键点与K210疲劳检测
  • 【跟着GPT4学JAVA】异常篇
  • Ubuntu上安装d4rl数据集
  • C++之STL整理(4)之set 用法(创建、赋值、增删查改)详解
  • IDEA MyBatisCodeHelper Pro最新版(持续更新)
  • sheng的学习笔记-AI-YOLO算法,目标检测
  • C# wpf 嵌入wpf控件
  • 云原生(六)、CICD - Jenkins快速入门
  • 基于java+springboot+vue实现的付费自习室管理系统(文末源码+Lw+ppt)23-400
  • 【JavaParser笔记02】JavaParser解析Java源代码中的类字段信息(javadoc注释、字段​​​​​​​名称)
  • Spring IoCDI(3)
  • 保研线性代数机器学习基础复习1
  • js绑定事件的方法
  • 是德科技keysight N9000B 信号分析仪
  • 软考 - 系统架构设计师 - 架构风格
  • CleanMyMac X2024专业免费的国产Mac笔记本清理软件
  • ES6 模块化操作
  • 统计XML文件内标签的种类和其数量及将xml格式转换为yolov5所需的txt格式
  • 《操作系统导论》第14章读书笔记:插叙:内存操作API
  • HAProxy + Vitess负载均衡
  • 2024年京东云主机租用价格_京东云服务器优惠价格表