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