• C/C++编译器工作原理


    编译过程主要分:预处理、编译+汇编、静态链接 这三个过程

    1、预处理:
    预处理过程主要处理那些源文件中的以“#”开始的预编译指令。包括#include,#define, #if等等
    主要的处理规则如下:

    • 将所有的#define删除,并且展开所有的宏。
      如#define a b 就是将所有的a替换成b
    • 处理所有的条件预编译指令,,如#if,#ifdef,#else,#endif,以此来决定对哪些代码进行处理,将那些不必要的代码过滤掉
    • 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置

    2、编译+汇编
    编译:
    通过词法分析、语法分析、语义分析、源代码优化、类型检查等等,将源代码翻译成汇编代码。

    汇编:
    通过代码生成、目标代码优化等把汇编语言代码翻译成二进制机器码

    编译+汇编示意图:
    在这里插入图片描述

    3、静态链接
    前面的编译中,每个源代码模块是单独编译的,然而不同的模块之间不可避免地要相互引用变量或函数,这些变量或函数的地址只有在此阶段才能确定。链接过程就是把编译器生成的一个个目标文件链接成二进制可执行文件(.exe)

    此阶段的链接是静态链接,运行期间的链接则是动态链接。
    动态链接:静态链接期间不完成实际的链接操作,只保存函数的重定位信息,在运行期间才去找到动态库的函数符号进行重定位。

    编译完成之后,运行:
    “静态的程序”被载入内存,由 CPU 逐条语句执行,就形成了“动态的进程”。

  • 相关阅读:
    ISO14229子类介绍
    Spark SQL结构化数据文件处理
    请求与响应:响应
    【Python】PaddleOCR文字识别国产之光 从安装到pycharm中测试 (保姆级图文)
    分布式锁
    map容器
    java计算机毕业设计基于springboo+vue的准妈妈孕期育儿婴幼儿交流平台
    Oracle 高可用 阅读笔记
    opencv-python cv2读写视频,灰度图像视频保存
    uview组件使用笔记
  • 原文地址:https://blog.csdn.net/qq_40337086/article/details/125901303