歷史沿襲至今,C語(yǔ)言程序典型的存儲(chǔ)空間安排圖
掃描二維碼
隨時(shí)隨地手機(jī)看文章
一個(gè)C程序經(jīng)過(guò)編譯鏈接之后形成可執(zhí)行文件,可執(zhí)行文件即由一條條的匯編指令組成,其排布方式如圖1所示。歷史沿襲至今,C程序一直由以下幾部分組成:
正文段:由CPU執(zhí)行的機(jī)器指令組成。通常,正文段是可共享的,在存儲(chǔ)器中也只有一個(gè)副本,另外,正文段通常是只讀的,防止程序由于意外修改其指令。
初始化數(shù)據(jù)段:通常將此段稱為數(shù)據(jù)段,它包含了程序中需要明確賦初值的變量。
未初始化數(shù)據(jù)段:在程序開始執(zhí)行之前,內(nèi)核將此段中的數(shù)據(jù)初始化為0或空指針。
棧:自動(dòng)變量以及每次函數(shù)調(diào)用時(shí)所需保存的信息存放在此段中。每次函數(shù)調(diào)用時(shí),其返回地址以及調(diào)用者的環(huán)境信息都存放在棧中。然后,最近被調(diào)用的函數(shù)在棧上為其自動(dòng)和臨時(shí)變量分配存儲(chǔ)空間。
堆:通常在堆中進(jìn)行動(dòng)態(tài)存儲(chǔ)分配。