1. 程式人生 > >C++記憶體分配方式-堆、棧、靜態儲存區、常量儲存區

C++記憶體分配方式-堆、棧、靜態儲存區、常量儲存區

C++中,記憶體分為5個區:堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。
棧:是由編譯器在需要時自動分配,不需要時自動清除的變數儲存區。通常存放區域性變數、函式引數等。
堆:是由new分配的記憶體塊,由程式設計師釋放(編譯器不管),一般一個new與一個delete對應,一個new[]與一個delete[]對應。如果程式設計師沒有釋放掉,資源將由作業系統在程式結束後自動回收。
自由儲存區:是由malloc等分配的記憶體塊,和堆十分相似,用free來釋放。
全域性/靜態儲存區:全域性變數和靜態變數被分配到同一塊記憶體中(在C語言中,全域性變數又分為初始化的和未初始化的,C++中沒有這一區分)。
常量儲存區:

這是一塊特殊儲存區,裡邊存放常量,不允許修改。
(注意:堆和自由儲存區其實不過是同一塊區域,new底層實現程式碼中呼叫了malloc,new可以看成是malloc智慧化的高階版本)