操做系統裝載程序以後,首先運行的代碼並非main的第一行,而是某些別的代碼,這些代碼負責準備好main函數執行所須要的環境,而且負責調用main函數,這時候你才能夠在main函數裏放心大膽地寫各類代碼:申請內存、使用系統調用、觸發異常、訪問I/O。函數
一個典型的程序運行步驟大體以下:操作系統
(1)操做系統在建立進程後,把控制權交到了程序的入口,這個入口每每是運行庫中的某個入口函數。線程
(2)入口函數對運行庫和程序運行環境進行初始化,包括堆、I/O、線程、全局變量構造等等。進程
(3)入口函數在完成初始化以後,調用main函數,正式開始執行程序主體部分。內存
(4)main函數執行完畢之後,返回到入口函數,入口函數進行清理工做,包括全局變量析構、堆銷燬、關閉I/O等,而後進行系統調用結束進程。變量