一. main函数之前
- 程序执行之前装载器会把环境变量和用户的命令行参数压入栈中。
环境变量:系统的公用数据,例如系统搜索路径和当前OS版本等。
- 初始化堆
向系统申请内存,构建malloc的底层内存管理结构。
- 初始化IO
在用户空间建立stdin,stdout,stderr
等对应的FILE
结构,使得程序进入main
函数之后就可以执行printf,scanf
等函数。
- 全局对象的构造
- 获取命令行参数和环境变量
从栈中取得数据
二.main函数之后
main之后执行的东西与main之前相反
- 调用全局对象的析构函数。
- 堆的释放。
- 其他资源的释放,例如文件资源。
- 调用exit()结束进程。