|
程序中,在數(shù)據(jù)聲明中定義的變量和數(shù)組,它們存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)或者動(dòng)態(tài)存儲(chǔ)區(qū),其空間由系統(tǒng)負(fù)責(zé)分配,最終也由系統(tǒng)負(fù)責(zé)回收,分配時(shí)機(jī)和回收時(shí)機(jī)用戶(hù)無(wú)法控制。另外,它們都有自己的名字(因?yàn)槎x時(shí)有命名),程序中可以通過(guò)變量名或數(shù)組名訪問(wèn)它們。 而“動(dòng)態(tài)分配”的變量或數(shù)組,分配時(shí)機(jī)和釋放時(shí)機(jī)可完全由程序員自己決定。另外,“動(dòng)態(tài)分配”的空間,由于沒(méi)有數(shù)據(jù)分明,因此這部分空間沒(méi)有名字,無(wú)法像使用變量或數(shù)組那樣通過(guò)變更名或數(shù)組名引用其中的數(shù)據(jù),只能通過(guò)指針變量來(lái)訪問(wèn)。 對(duì)于數(shù)據(jù)在內(nèi)存中的存儲(chǔ),C語(yǔ)言提供了3種策略,即靜態(tài)分配、自動(dòng)分配(棧式分配)和動(dòng)態(tài)分配。 1 靜態(tài)分配:靜態(tài)分配由編譯器自動(dòng)分配和釋放,在編譯時(shí)就確定了運(yùn)行時(shí)變量在內(nèi)存中的位置。這種性質(zhì)允許變量在整個(gè)程序的運(yùn)行過(guò)程中都不消失。在C語(yǔ)言中使用關(guān)鍵字static來(lái)定義靜態(tài)變量(可以是靜態(tài)局部變量、靜態(tài)全局變量或者在所有函數(shù)外面定義的全局變量)。
2 自動(dòng)內(nèi)存分配(在棧上分配):自動(dòng)分配同樣也是由編譯器自動(dòng)分配和釋放,在編譯時(shí)并不確定變量在內(nèi)存中的位置,而是在調(diào)用函數(shù)時(shí)給變量分配空間,函數(shù)返回時(shí)釋放空間。C編譯器通過(guò)系統(tǒng)棧來(lái)管理這樣的變量。在C語(yǔ)言中,auto型變量是通過(guò)棧來(lái)管理的,不需要人為管理。
3 動(dòng)態(tài)內(nèi)存分配(在堆上分配):動(dòng)態(tài)分配是指在程序運(yùn)行過(guò)程中動(dòng)態(tài)申請(qǐng)內(nèi)存的方法。這樣的內(nèi)存空間是從一個(gè)叫做堆的空間申請(qǐng)的,申請(qǐng)的空間是一段連續(xù)的內(nèi)存空間。不需要該內(nèi)存空間時(shí),應(yīng)該人為釋放它,否則會(huì)導(dǎo)致內(nèi)存資源的浪費(fèi)。
C語(yǔ)言中malloc()大體的實(shí)現(xiàn)是,從操作系統(tǒng)一次性地取得比較大的內(nèi)存,然后將這些內(nèi)存“零售”給應(yīng)用程序。
(內(nèi)存分配中的堆和棧與數(shù)據(jù)結(jié)構(gòu)的堆和棧有本質(zhì)的區(qū)別。) C語(yǔ)言的變量有兩種屬性:數(shù)據(jù)類(lèi)型和存儲(chǔ)類(lèi)型。存儲(chǔ)類(lèi)型標(biāo)識(shí)符有:auto,extern,static,register。用來(lái)說(shuō)明變量在計(jì)算機(jī)中不同的存儲(chǔ)形態(tài),包括存儲(chǔ)位置、作用域和生存期。
函數(shù)調(diào)用時(shí),主調(diào)函數(shù)的實(shí)參是準(zhǔn)備好的具體數(shù)值,形參是函數(shù)調(diào)用時(shí)才開(kāi)辟單元的變量。 在編寫(xiě)程序時(shí),要告訴計(jì)算機(jī)這些數(shù)據(jù)的存儲(chǔ)位置。變量的存儲(chǔ)類(lèi)型的功能之一就是確定該變量是存放在動(dòng)態(tài)數(shù)據(jù)區(qū)、靜態(tài)存放區(qū)還是寄存器中。
數(shù)據(jù)存儲(chǔ)涉及的內(nèi)容:
|
|
|
來(lái)自: thchen0103 > 《04.01-04.30》