2编译和链接
目录
温度而知新
- 北桥:负责CPU,GPU,内存等高速设备。南桥:负责键盘,鼠标,硬盘等低速设备
- 运行库使用操作系统提供的系统调用接口(System Call Interface),系统调用接口在实现中往往以软件中断(Software Interrupt)的方式提供,比如Linux使用0x80号中断作为系统调用接口,Windows使用0x2E号中断作为系统调用接口(从Windows XP Sp2开始,Windows开始采用一种新的系统调用方式)。
- 操作系统的一个功能是提供抽象的皆苦,另外一个主要功能是管理硬件资源。
- 线程优先级改变一般有三种方式:
- 用户指定优先级
- 根据进入等待状态的频繁程序提升或降低优先级
- 长时间得不到执行而被提升优先级
编译步骤
编译分为4个步骤:预处理、编译、汇编、链接
预处理
预处理过程主要处理那些源代码文件中的以“#”开始的预编译指令。比如“include”,“#define”等
|
|
编译
编译过程就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成的相应的汇编代码文件,这个过程往往是我们所说的整个程序构建的核心部分,也是最复杂的部分之一。
|
|
汇编
汇编器是将汇编代码转变成机器可以执行的指令,每一个汇编语句几乎都对应一条机器指令。
|
|
链接
链接过程主要包括了地址和控件分配、符号决议和重定位等这些步骤。最基本的静态链接,每个模块的源代码文件(如.c)文件经过编译器编译成目标文件(ObjectFile,一般扩展名为.o或.obj),目标文件和库(Library)一起链接形成最终可执行文件。而最常见的库就是运行时库
- 为什么汇编器不直接输出可执行文件而是输出一个目标文件呢?
- 链接过程到底包含了什么内容?
- 为什么要链接?