计算机组成原理与编译原理基础总结

版权申诉
0 下载量 35 浏览量 更新于2024-08-06 收藏 838KB DOC 举报
"《计算机组成原理-CSAPP》网课总结(二)——编译原理基础" 本文档是对《计算机组成原理》(也称CSAPP)课程中编译原理基础部分的总结,涵盖了从源代码到可执行文件的整个编译过程,包括预编译、编译、汇编和链接四个阶段。 1. 预编译: 预编译阶段主要处理源代码中的宏定义(Macro Replacement)和头文件(Header File Inclusion)。这一过程会将预处理器指令转换为标准C或C++语法,并生成扩展名为`.i`的预处理文件。预处理的目标是为后面的编译步骤提供标准化的输入。 2. 编译: 编译阶段是将预处理后的`.i`文件转化为汇编语言表示的`.s`文件。这个过程涉及到词法分析、语法分析、语义分析和优化。编译器将源代码转换成与特定CPU架构相关的机器指令,使得每条汇编指令对应一个CPU的操作。 3. 汇编: 汇编器将`.s`文件转化为可重定位目标文件,通常为`.o`或`.obj`。这个阶段,汇编器会把汇编指令转换为实际的二进制机器码,并添加符号表和其他元数据,以便链接器使用。 4. 链接: 链接器将多个`.o`文件组合成一个可执行文件。它会解决各个文件间的符号引用,确保所有函数和变量都有正确的定义。在这个过程中,如果出现未定义的符号,链接器会报告错误;如果有重复定义,也会报错。同时,链接器会引入必要的系统文件,例如C运行时库(C Runtime Library,cruntime),以支持程序的启动和运行。 5. 可执行文件与库文件: 生成的可执行文件包含代码段和数据段,以及其他如初始化数据、字符串常量等部分。程序加载到内存后,操作系统会调用`_start()`函数开始执行。而库文件,如静态库(Static Library),则在编译时被链接,只有被使用的函数才会被复制到最终的可执行文件中。 总结来说,编译过程是将高级语言转化为机器可理解的指令,而链接过程则是将这些指令整合并解决依赖关系,形成完整的可执行程序。了解这个过程对于深入理解计算机系统的工作原理至关重要。