我们看看底层的汇编代码:

__start:
     :
     init stack;
     init heap;
     open stdin;
     open stdout;
     open stderr;
     :
     push argv;
     push argc;
     call _main; (调用 main)
     :
     destory heap;
     close stdin;
     close stdout;
     close stderr;
     :
     call __exit;

我们可以看到main函数也只是其中的一个函数调用而已。

在调用main函数之前,会先进性初始化栈,堆,打开标准输入,输出,错误流,把参数压栈。还有一些全局变量、对象和静态变量、对象的空间分配和赋初值。

在调用main函数之后,要销毁堆内存,关闭标准输入,输出,错误流。

这些都是编译器帮助我们自动生成的,帮助我们启动main函数。