一個(gè)程序在其運(yùn)行期間,它的程序代碼和數(shù)據(jù)會(huì)被分別存儲(chǔ)在4個(gè)不同的內(nèi)存區(qū)域。
程序代碼區(qū):程序的各函數(shù)代碼存放在此區(qū)域中;
全局?jǐn)?shù)據(jù)區(qū):程序的全局?jǐn)?shù)據(jù)(如全局變量)和靜態(tài)數(shù)據(jù)(static)存放在此區(qū)域中;此區(qū)域中的數(shù)據(jù)由C++編譯器建立,對于定義時(shí)沒有初始化的變量,系統(tǒng)會(huì)自動(dòng)將其初始化為0。這個(gè)區(qū)域中的數(shù)據(jù)會(huì)一直保存,直到程序結(jié)束時(shí)才由系統(tǒng)負(fù)責(zé)回收。
棧區(qū):程序的局部數(shù)據(jù)(在函數(shù)中定義的數(shù)據(jù))存放在此區(qū)域中;需要注意static類型的局部變量存儲(chǔ)在此。只有當(dāng)函數(shù)被調(diào)用時(shí),系統(tǒng)才在棧區(qū)中為它們分配存儲(chǔ)空間,并且不會(huì)對分配的存儲(chǔ)單元做初始化,一旦函數(shù)調(diào)用完成,系統(tǒng)就會(huì)回收這些變量在棧區(qū)中的存儲(chǔ)單元。
堆區(qū):程序的動(dòng)態(tài)數(shù)據(jù)(new,malloc)就在此區(qū)域中分配存儲(chǔ)空間;用完之后由程序員用delete或free將其歸還給系統(tǒng)。
靜態(tài)變量可分為靜態(tài)全部變量和靜態(tài)局部變量,前者的作用于是整個(gè)程序范圍,后者的作用域局限于定義它的語句塊。靜態(tài)局部變量的作用域與普通局部變量的作用域是相同的,但它與全局變量有著同樣的生命期。
未提供初始化的全局?jǐn)?shù)據(jù)區(qū)中的變量將被系統(tǒng)自動(dòng)初始化為0,堆和棧中的變量不被初始化。
當(dāng)使用指針或引用從函數(shù)中返回一個(gè)地址時(shí)需要小心,一定不要返回局部變量的指針或引用。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注