C++ 內存布局

堆、棧、靜態數據區、常量區、代碼區
以下是各個區的作用:
(1)代碼區:存放程序代碼;
(2)數據區
a.靜態數據區: 在編譯器進行編譯的時候就為該變量分配的內存,即全局變量和靜態變量(用static聲明的變量),存放在這個區的數據程序全部執行結束后系統自動釋放,聲明周期貫穿于整個程序執行過程。全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域(.data),未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域(.bss)。
b.堆區:這部分存儲空間完全由程序員自己負責管理,它的分配和釋放都由程序員自己負責。這個區是唯一一個可以由程序員自己決定變量生存 期的區間。可以用malloc,new申請對內存,并通過free和delete釋放空間。如果程序員自己在堆區申請了空間,又忘記將這片內存釋放掉,就 會造成內存泄露的問題,導致后面一直無法訪問這片存儲區域。但程序退出后,系統自動回收資源。分配方式倒是類似于鏈表。
c.棧區:存放函數的形式參數和局部變量,由編譯器分配和自動釋放,函數執行完后,局部變量和形參占用的空間會自動被釋放。效率比較高,但是分配的容量很有限。
d.常量區: 存放常量的區間,如字符串常量等,注意在常量區存放的數據一旦經初始化后就不能被修改。 程序結束后由系統釋放。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容