
以这个程序为例,从编译到运行的过程是:
1.编译器扫描全部代码,发现符号a i b c,其中a c为全局变量,i为自动变量,b为静态变量,生成符号表和AST
2.编译器将a b c的值1 2 3记录在一个名为.data的段中,将main函数的汇编码记录在一个名为.text的段中,并记录符号a b c和.data段中对应位置的映射关系,生成目标文件
3.目标文件经过链接得到可执行文件,这一步和本文关系不大,可跳过
4.运行程序,操作系统装载程序的可执行文件,.data段和.text段中的全部内容被装载进内存,此时在代码层面等价于变量a b c已分别被初始化为1 2 3
5.程序转到入口点main开始执行,执行int i = 10,将10写入栈上对应的内存位置
6.执行i++,将该位置中的值+1
7.执行return 0,程序结束,将退出码0返回给操作系统
全局变量和静态变量的初始化在第4步程序装载时就已完成,是程序初始化过程的一部分,此时程序还未开始执行。