以x86的CPU和windows爲例,假如使用C語言寫了個程序,其中用到了molloc函數動態申請一塊內存。從*.c的程序文本,到能夠在windows系統中運行的程序,這中間大致發生了那些事情,程序在運行時又大致發生了那些事情,找到c語言運行時庫在其中所處的位置,和動/靜態庫的使用時機,那應該就能夠理解了。windows
編譯過程:程序文本->編譯器->目標文件->連接器(將庫動/靜態連接)->程序。函數
運行過程:雙擊程序->操做系統程序加載器(根據程序類型,加載動/靜態庫並修改程序中函數的指向位置,使其指向實際地址)->加載完成跳轉到程序main入口運行->molloc->windows的C運行時庫中對應函數->windows的API->windows系統分配內存->返回。 spa
因爲c語言不知道底層的運行環境,CPU類型、內存分配、外設類型等,須要經過操做系統才能完成相應任務。因此根據實際狀況,你們定一個標準出來,把這些任務標準化,標準名稱和出入口參數類型。而後各個操做系統根據標準和本身的系統接口編寫相應的程序,造成相應的運行時庫,爲C程序提供運行時環境。因此不一樣的操做系統的c運行時庫不一樣。同時須要編譯器、連接器、加載器配合。操作系統
大致就這樣,可能細節不許確。 但願有點兒用吧。接口