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到输出的可执行文件中,即最终输出的可执行文件成了上一阶段的目标文件的集合,文件体积较大
      • 动态链接
        • 只在最终输出的可执行文件中记录下相关静态链接库的信息,只在被执行时才加载该部分代码,体积较小,但加载其他库时可能会消耗一点性能
  • 相关阅读:
    poj 2728 Desert King
    uva 439 Knight Moves
    hdu 1875 畅通工程再续
    scau实验题 8600 骑士周游问题(有障碍物)
    scau实验题 8596 Longest Ordered Subsequence
    poj 1679 The Unique MST
    uva 527 Oil Deposits
    poj 2533 Longest Ordered Subsequence
    .net 程序员 java 开发入门
    Collation conflict occur at operation on User define funtion & table's column
  • 原文地址:https://www.cnblogs.com/lawrencechen/p/4862785.html
Copyright © 2011-2022 走看看