我們看看底層的匯編代碼:
__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函數。