位置:首頁(yè) > 軟件操作教程 > 編程開發(fā) > C語(yǔ)言 > 問題詳情

C語(yǔ)言 動(dòng)態(tài)存儲(chǔ)與靜態(tài)存儲(chǔ)

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-01

一般認(rèn)為c語(yǔ)言程序在內(nèi)存中是分成幾個(gè)存儲(chǔ)區(qū)來(lái)存儲(chǔ)代碼和數(shù)據(jù)的:

(1)代碼區(qū):C語(yǔ)言源代碼經(jīng)過編譯鏈接后形成可執(zhí)行的機(jī)器代碼,這部分代碼是CPU執(zhí)行的指令部分,只讀,可共享。

(2)只讀數(shù)據(jù)區(qū):存儲(chǔ)程序中不會(huì)被改變的數(shù)據(jù),如各種常量及符號(hào)常量等,這些數(shù)據(jù)不允許被修改。

(3)靜態(tài)存儲(chǔ)區(qū):全局變量和靜態(tài)變量都存儲(chǔ)在此處,其中初始化的全局變量和靜態(tài)變量存放在初始化數(shù)據(jù)區(qū),未初始化的全局變量和靜態(tài)變量存儲(chǔ)在未初始化數(shù)據(jù)區(qū)。未初始化的全局變量和靜態(tài)變量,系統(tǒng)自動(dòng)將數(shù)值型初始化為0,字符型初始化為'\0'。這些變量只有程序結(jié)束才會(huì)被釋放。

(4)動(dòng)態(tài)存儲(chǔ)區(qū):動(dòng)態(tài)存儲(chǔ)區(qū)又分為堆和桟。

    ?堆:由程序員進(jìn)行分配和釋放。一般使用malloc()、callocO等函數(shù)申請(qǐng)的內(nèi)存空間都是在堆上,這些內(nèi)存空間如果不再使用應(yīng)該由程序員用命令釋放。如free()函數(shù),如果程序員不釋放,程序結(jié)束后可由操作系統(tǒng)回收。

    ?棧:由編譯器自動(dòng)分配釋放。函數(shù)中所使用的形參及未加static修飾的普通變量都存儲(chǔ)在此處。

    這些變量當(dāng)函數(shù)被調(diào)用時(shí)才會(huì)被分配內(nèi)存空間,一旦函數(shù)調(diào)用結(jié)束,所分配空間馬上釋放。

    所以靜態(tài)存儲(chǔ)區(qū)的變量在程序執(zhí)行的全過程中始終占據(jù)著大小固定的存儲(chǔ)單元,直到程序運(yùn)行結(jié)束才予以釋放。

    動(dòng)態(tài)存儲(chǔ)的變置是指變量的存儲(chǔ)單元在程序運(yùn)行過程中由系統(tǒng)動(dòng)態(tài)地分配和回收,當(dāng)定義它們的函數(shù)被調(diào)用時(shí)才會(huì)被分配內(nèi)存空間,函數(shù)調(diào)用結(jié)束,系統(tǒng)收回變量所占內(nèi)存。

    根據(jù)變量是靜態(tài)存儲(chǔ)方式還是動(dòng)態(tài)存儲(chǔ)方式,可將變量可分為4種:auto變量、static變量、register變量、extern變量。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部