zoukankan      html  css  js  c++  java
  • C:源文件编译过程

    可以大致概括为3个阶段:
    1. 源文件 → 汇编代码(文本)
    2. 汇编代码 → 机器语言(二进制)
    3. 各个目标文件的处理
    详细过程:
    1. 预编译处理 Pre-processing(*.c/ *.cpp → *.i)
      • 源文件中的伪指令进行处理,伪指令包括如下几种:
      • 宏定义(#define)
      • 条件编译指令(#ifdef, #ifndef, #else, #elif, #endif等)
      • 头文件包含指令(#include)
      • 特殊符号的处理(如LINE等)
      • 这一步骤的实质就是把源文件中的伪指令替换掉,生成一个没有宏定义、条件编译指令、头文件包含指令和特殊符号的文件,这个文件是源文件的等效文本文件
    2. 编译阶段 Compilation(*.i → *.s)及优化阶段(这里不作展开)
      • 对经过预处理阶段输出的文件,进行语法分析词法分析
      • 通过语法分析和词法分析后,编译为汇编代码(文本)
    3. 汇编阶段 Assembly(*.s → *.o)
      • 将汇编代码文件编译成机器码(目标文件,二进制)
    4. 链接阶段 Linking(*.out)
      • 静态链接
        • 将所需的函数从静态链接库copy到输出的可执行文件中,即最终输出的可执行文件成了上一阶段的目标文件的集合,文件体积较大
      • 动态链接
        • 只在最终输出的可执行文件中记录下相关静态链接库的信息,只在被执行时才加载该部分代码,体积较小,但加载其他库时可能会消耗一点性能
  • 相关阅读:
    PL/SQL跨库查询数据
    oracle 两个时间相减
    导出Excel格式数据
    Java导出pdf文件数据
    $.ajax相关用法
    oracle 删除掉重复数据只保留一条
    常用Oracle操作语句
    JS请求服务器,并返回信息,请求过程中不需要跳转页面
    tomcat部署web项目的3中方法
    Date()日期转换和简单计算
  • 原文地址:https://www.cnblogs.com/lawrencechen/p/4862785.html
Copyright © 2011-2022 走看看