淺談C++內存分配

C++內存分配由五個部分組成:棧、堆、全局代碼區、常量區、程序代碼區。如下圖所示:

1、棧區:函數中定義的局部變量放在棧中,函數執行結束時存儲單元自動釋放。棧內存分配一般採用寄存器來存取,存取效率高但是內存容量有限。

2、堆區:通常在堆中進行動態分配。程序運行的時候用new或malloc申請一定大小的內存,用delete或free釋放之前申請的內存。不管內存空間在何時申請,只要沒有用delete或free釋放該內存空間就一直被佔用着。也就是說,動態內存分配的變量的生存週期由程序員自己決定。程序利用new或malloc申請了一塊內存,用完之後沒有釋放掉,這樣這塊內存就失去了控制,這就造成了內存泄露。

3、全局代碼區:這塊內存區域存放的是全局變量、static變量。內存在程序編譯的時候就已經分配好,在程序的整個運行期間都存在。在C語言中,全局變量區又分爲初始化的和未初始化的。在C++中沒有這種區別,它們共同佔用這塊內存區域。

4、常量區:存放的是常量,不允許修改。

5、程序代碼區:存放整個程序的代碼。注意,數據和代碼是分開存儲的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章