之前一直以为程序是从main函数开始的,原来一直都理解错误了。
看一段代码:
#include<cstdio>
int g_val = 1;
int main()
{
printf("main Fun\n");
return 0;
}
调试发现,当代码执行main函数的是,全局变量g_val已经有值了,也就是g_val初始化过程已经结束了。
今天看一本书,恍然大悟,采摘如下:
一个典型的程序运行步骤:
1. 操作系统在创建进程后,把控制权交给程序入口,这个入口往往就是运行库中的某个入口函数;
2.入口函数对运行库和程序的运行环境进行初始化,包括堆,I/O,线程,全局变量构造等等。
3.入口函数初始化完成后,才真正调用main,进入函数的主体部分。
4. 当main函数执行完成之后,会返回入口函数进行清理工作,包括全局变量的虚构,堆的销毁,关闭I/O等,然后进行系统调用结束进程。
至于入口函数如何操作,暂时还不打算去了解。