靜態儲存區,堆記憶體,棧空間,常量

2021-06-19 19:27:58 字數 1378 閱讀 4473

靜態儲存區,堆記憶體,棧空間,常量區,自由儲存區,動態儲存區

2007/07/05 2:48 p.m.

乙個由c/c++編譯的程式占用的記憶體分為以下幾個部分

---------------

heap |

---------------

stack |

---------------

const |(字串常量通常放在data-const區中)

data--common|

data |

---------------

code |

---------------

1、棧區— 

由編譯器自動分配釋放 

,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。 

2、堆區 

—  一般由程式設計師分配釋放, 

若程式設計師不釋放,程式結束時可能由os** 

。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。 

3、全域性區—,全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 

未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。 

-  程式結束後有系統釋放 

4、文字常量區 

—常量字串就是放在這裡的。 

程式結束後由系統釋放 

5、程式**區—存放函式體的二進位制**。

a 靜態資料區:內存在程式啟動的時候才被分配,而且可能直到程式開始執行的時候才被初始化,如函式中的靜態變數就是在程式第一次執行到定義該變數的**時才被初始化。所分配的內存在程式的整個執行期間都存在,如全域性變數,static變數等。

注意:初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數與靜態變數在相鄰的另一塊區域,同時未被初始化的物件儲存區可以通過void*來訪問和操縱,程式結束後由系統自行釋放。

b **區:存放函式體的二進位制**;

c 棧區:存放自動變數。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元由編譯器自動釋放,超出其作用域外的操作沒有定義。棧記憶體分配運算內置於處理器的指令集中,效率很高,但分配的記憶體容量有限。棧存放函式的引數值,區域性變數的值等。

d 堆區(自由儲存區):在執行的時候呼叫程式(如c中的malloc或c++中的new)分配記憶體,可以在任何時候決定分配記憶體及分配的大小,使用者自己負責在何時釋放記憶體(如用free或delete)。堆中的所有東西都是匿名的,這樣不能按名字訪問,而只能通過指標訪問。

函式指標指向code區,是程式執行的指令**,資料指標指向data,heap,stack區,是程式依賴以執行的各種資料

在檔案作用域宣告inline函式預設為static儲存型別,const常量預設為static儲存,如果加上extern,則為外部儲存型別。

靜態儲存區,堆記憶體,棧空間,常量

靜態儲存區,堆記憶體,棧空間,常量區,自由儲存區,動態儲存區 2007 07 05 2 48 p.m.乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 heap stack const 字串常量通常放在data const區中 data common data code 1 棧區 由編譯器自動分...

堆記憶體 棧記憶體 靜態儲存區

參考部落格 一般說到記憶體,指的是計算機的隨機儲存器ram,程式都是在這裡面執行。1.棧記憶體 棧記憶體由作業系統自動分配和釋放,速度快,使用方便,但程式設計師無法控制。若分配失敗,則提示棧溢位錯誤。注意,const區域性變數也儲存在棧中,向著記憶體位址減小的方向增長。棧記憶體儲存的是程式執行過程中...

記憶體分配 靜態儲存區 棧 堆

一 記憶體基本構成 可程式設計內存在基本上分為這樣的幾大部分 靜態儲存區 堆區和棧區。他們的功能不同,對他們使用方式也就不同。靜態儲存區 內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。它主要存放靜態資料 全域性資料和常量。棧區 在執行函式時,函式內區域性變數的儲存單元都可以在...