一、预处理
主要功能:处理程序中的预处理语句
1.文件包含;
2.宏的替换;
3.条件编译;
二、编译扫描(符号扫描=>汇编代码)
主要功能:将预处理完的程序扫描符号生成,翻译成汇编代码;
?是否变量地址的映射替换在此步中完成的。
[优化程序]:编译器对程序编译的优化处理是在何时刻进行的...
三、汇编扫描
主要功能:将汇编程序编译生成二进制代码和重定位信息的目标文件?
四、连接程序
主要功能:可重定位的目标文件和相应的库文件链接生成可执行文件;
五、生成的二进制文件可以装入内存执行;
问题是,原程序中包含的变量在执行过程中都是存储在内存中的,在编译的时候怎么将变量的地址和执行时的内存地址联系起来的呢?
亦即符号名地址/名地址,符号名空间/名空间如何进行存储管理的;
存储器映射管理方式相关:
编译程序生成的相应地址为虚拟地址/逻辑地址/相对地址,而内存地址为相应的物理地址/绝对地址。
1.固定定位方式
即名地址/虚拟地址和实际内存地址使用时一致;
--单板机、嵌入式系统的常用方式;
2.静态重定位方式
--虚拟地址/逻辑地址可以从零地址开始计算,在倒入内存中时,所有的地址再根据内存的基起始地址进行重新计算;
3.动态重定位方式
--实时计算方式,将基地址和偏移地址实时计算成内存地址;
优点:实时计算内存地址,在程序运行过程中,可以从内存中载入载出;
需要增加额外资源,如寄存器:MR/BR/VR MR=BR VR,根据基地址和虚拟地址得到相应的物理地址;