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

2021-09-25 15:00:22 字數 1032 閱讀 2828

參考部落格:

一般說到記憶體,指的是計算機的隨機儲存器ram,程式都是在這裡面執行。

1.棧記憶體:棧記憶體由作業系統自動分配和釋放,速度快,使用方便,但程式設計師無法控制。若分配失敗,則提示棧溢位錯誤。注意,const區域性變數也儲存在棧中,向著記憶體位址減小的方向增長。棧記憶體儲存的是程式執行過程中的區域性變數。

//可以看到記憶體位址逐漸減小

#include using namespace std;

int main()

執行結果:

2.堆記憶體

堆記憶體用於儲存程式設計師申請的記憶體空間以及全域性變數和靜態變數,當程式設計師向作業系統申請一塊記憶體時,當系統收到程式的申請時,會遍歷乙個記錄空閒記憶體位址的鍊錶,尋找第乙個空間大於所申請空間的堆節點,然後將該節點從空閒節點鍊錶中刪除,並將該節點的空間分配給程式,分配的速度較慢,位址不連續,容易碎片化。此外,由程式設計師申請,也必須由程式設計師釋放,否則會造成記憶體洩露,如果程式設計師不進行釋放,最後作業系統會釋放掉這一部分空間。

//測試堆記憶體和棧記憶體的區別

//棧記憶體;由程式自動向作業系統申請分配以及**,速度快,使用方便,但程式設計師無法控制

//堆記憶體:由程式設計師控制,也由程式設計師銷毀

#include int main()

要注意那個指標,指標所佔空間為4個位元組(在本機),指標是區域性變數,所以它在棧記憶體中,但是指標所儲存的內容是指向堆記憶體的位址編號。這句話的意思就是:在棧記憶體中存放了乙個指向一塊堆記憶體的指標pi,程式會先確定在堆中分配記憶體的大小,然後呼叫 operator new分配記憶體,然後返回這塊記憶體的首位址,放入棧中。

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

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

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

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

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

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