C/C++编译过程
面阿里,被问到这个问题。之前从来没有仔细看过,结果回答漏了一个步骤。现在来这里补个课:
编译步骤:预处理、编译、汇编、链接。
预处理
从源文件到预编译文件
包含:#include #ifdef # define等的处理和替换
编译
从预编译文件到汇编代码
将C语句转换成汇编代码,包含静态变量分配,过程转换,各种赋值、运算。
编译期只能确定各个变量的相对偏移量。
汇编
从汇编代码到目标二进制文件
主要是把汇编代码按CPU指令转换成二进制数据。
链接
将多个目标二进制文件链接为可执行文件
根据相对偏移量确定虚拟地址