一、乙個c/c++編譯的程式所占用的記憶體分為以下5部分
名稱英文
存放變數型別
分配方式
核心特點
棧區stack
函式的引數值,區域性變數等
程式執行時由編譯器自動分配,程式結束時由編譯器自動釋放。
操作方式類似於資料結構中的棧
棧記憶體分配運算內置於處理器的指令集中,效率很高, 但是分配的記憶體容量有限。
堆區heap
一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**。
在記憶體開闢另一塊儲存區域。注意它與資料結構中的堆是兩回事,分配方式類似於鍊錶。程式在執行的時候用malloc或new申請任意多少的內 存,程式設計師自己負責在何時用free或delete釋放記憶體。
如果在堆上分配了空間,就有責任**它,否則執行的程式會出現記憶體洩漏 ,頻繁地分配和釋放不同大小的堆空間將會產生堆內碎塊。
全域性區(靜態區)
static
全域性變數和靜態變數
編譯器編譯時即分配記憶體,—程式結束後由系統釋放。
全域性變數和靜態變數的儲存是放在一起的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。——程式結束後由系統釋放。
內存在程式編譯的時候就已經分配好,這塊內存在程式的整個 執行期間都存在。例如全域性變數,static變數。
文字常量表
常量字串
程式結束後由系統釋放
程式**區
存放函式體的二進位制**
二、記憶體分配方式
c c 程式記憶體分配
首先感謝下原作者,寫的非常明白,非常詳細。乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意...
C C 程式記憶體分配
乙個由c c 編譯器編譯的程式占用的記憶體可分為如下幾個部分 棧區 stack 由編譯器自動分配和釋放,存放函式的引數值,區域性變數值等,其操作方式類似於資料結構中的棧,先進後出 堆區 heap 由程式設計師分配和釋放,若程式設計師不釋放,則在程式結束時可能由作業系統 操作方式類似於資料結構中的鍊錶...
c c 程式的記憶體分配
我一直迴避程式的記憶體管理,因為愛之愈深,恨之愈烈。但是,還是由很多的朋友一直在體這方面的問題,所以就索性把它坦白了,也許對你我都是一件好事情。首先,需要搞清楚 變數的型別和它的儲存類別是兩個概念。資料型別和記憶體管理沒有直接的關係。乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 s...