C++ 中的內(nèi)存區(qū)域分為6塊:
- 常量數(shù)據(jù)區(qū):存儲(chǔ)字符串等在編譯期間就能確定的值。類對(duì)象不能存在與這個(gè)區(qū)域中。在程序的整個(gè)生存周期內(nèi),區(qū)域中的數(shù)據(jù)都是可用的。區(qū)域內(nèi)的所有數(shù)據(jù)都是只讀的,任何企圖修改本區(qū)域數(shù)據(jù)的行為都會(huì)造成無(wú)法預(yù)料的后果。
- 棧區(qū):存儲(chǔ)自動(dòng)變量。棧區(qū)中,內(nèi)存一旦被分配,對(duì)象就立即被構(gòu)造好了;對(duì)象一旦被銷毀,分配的內(nèi)存也立即被收回。
- 自由存儲(chǔ)區(qū):是 C++ 的兩個(gè)動(dòng)態(tài)內(nèi)存區(qū)域之一,使用 new 和 delete 來(lái)予以分配和釋放。
- 堆區(qū):是另一個(gè)動(dòng)態(tài)存儲(chǔ)區(qū)域,使用 malloc、free 以及一些相關(guān)變量來(lái)進(jìn)行分配和回收。
- 全局/靜態(tài)區(qū):在程序啟動(dòng)時(shí)才被分配,而且可能直到程序開始執(zhí)行的時(shí)候才被初始化。比如,函數(shù)中的靜態(tài)變量就是在程序第一次執(zhí)行到定義該變量的代碼時(shí)才被初始化的。對(duì)那些跨越了編譯單元的全局變量進(jìn)行初始化操作的順序是沒(méi)有被明確定義的,因而需要特別注意管理全局對(duì)象(包括靜態(tài)類對(duì)象)之間的依賴關(guān)系。
另外注意,C++ 標(biāo)準(zhǔn)對(duì)于堆和自由存儲(chǔ)區(qū)是否有聯(lián)系沒(méi)有予以詳細(xì)說(shuō)明,不同編譯器可能有不同的實(shí)現(xiàn)。
文章來(lái)源:
http://my.donews.com/robinchow/2007/01/14/kvdartgbqpsrlrmsxjgnplhdrqqyqtkapnag/