C C 程式是如何分配記憶體的?

2021-09-02 15:20:58 字數 767 閱讀 2236

一、乙個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...