C++中五種不同類型的內存區域,每種區域中的特性都不同。
1、常量區:主要存儲的是字符串和其他在編譯期就已知道的數據。它的生命周期和程序等同,并且數據是只讀的。如果試圖對它修改,結果根據編譯器而異。
2、棧區:存儲的是自動變量。它的內存分配通常是最快,因為它只涉及的棧指針的操作。它定義時構造,在自動變量作用域結束時銷毀。因而我們無法對尚未分配的棧空間操作,除非用顯式析夠和布局new。
3、自由存儲區:由new/delete分配和釋放。對象的生命期可能小于分配的存儲空間的生命期。即分配內存不一定要初始化,銷毀對象未必要釋放空間。
4、堆區:通過malloc()/free()分配和釋放。在某些編譯器中,默認的全局的new/delete調用的malloc()/free().在堆中分配的內存不能在自由存儲區安全的釋放,反之亦然。在堆內存可用在布局new的構造、析夠中。
5、全局/靜態區:程序啟動時分配了內存,當只有用時才可以初始化。跨編譯單元的全局變量的初始化順序是未定的。
在C++中優先使用自由存儲(new/delete),避免用malloc/free.