c语言编译原理

22 阅读1分钟

一.内存管理

计算机为了便于管理,被分为了三大部分。堆栈段,数据段和代码段。

  1. 其中堆栈段分为堆内存和栈内存
  2. 数据段分为全局变量和只读区;
  3. 代码段只储存函数的首地址

image.png

二 编译过程

其过程可分为编辑,预处理,编译,链接和执行五个各阶段,我们主要重点讨论预处理,编译,链接和执行四个阶段

    1. 预处理:会将源代码文件分解为语法单元去掉注释,将预处理字符和包含的内容展开(如define和include),不会对错误进行检测,
    1. 编译 :分为汇编和只编译两步,编译器检测分析语法单元,检查源代码的有效性,成功会有机器码,符号
    1. 链接 :链接器解析对外部变量和函数引用找到符号(唯一的),有时会有链接库文件,确定数据段和代码段,产生可执行文件。(在一个可执行的程序,一定不能重复定义外部变量和函数)
    1. 操作系统将可执行的程序加载到内存区域;cpu执行指令,读取数据,确定堆栈段地址。(./为可执行程序)