c/c++语言程序执行过程:
预处理>编译>汇编>链接>装载
预处理:删除宏定义,处理预编译指令,删除注释等
编译:词法分析、语法分析、语义分析、源代码优化、代码生成、目标代码优化
汇编:转换成汇编语言即二进制表示的语言
链接:静态链接即把需要的方法和数据复制到本方法的地址内,组装成单一程序,浪费内存。动态链接即在运行期绑定
装载:
-
创建虚拟地址空间
-
读取可执行文件头,并且建立虚拟空间与可执行文件的映射关系
-
将CPU的指令寄存器设置为运行库的初始函数(初始函数不止一个,第一个启动函数为:
_start
),初始了main()
函数的环境,然后指向可执行文件的入口