C 記憶體模型

2021-10-05 16:50:46 字數 1224 閱讀 1015

c++的記憶體分為5類

1、堆,2、棧,3、常量儲存區,4、靜態儲存區,5**區

棧(stack):是一種連續儲存的資料結構,具有先進後出的性質。通常的操作有入棧(圧棧)push、出棧pop和棧頂元素top。想要讀取棧中的某個元素,就要將其之前的所有元素出棧才能完成。模擬現實中的箱子一樣。

堆:是一種非連續的樹形儲存資料結構,每個節點有乙個值,整棵樹是經過排序的。特點是根結點的值最小(或最大),且根結點的兩個子樹也是乙個堆。常用來實現優先佇列,訪問隨意。

棧記憶體:由程式自動向作業系統申請分配以及**,速度快,使用方便,但程式設計師無法控制。若分配失敗,則提示棧溢位錯誤。注意,const區域性變數也儲存在棧區內,棧區向位址減小的方向增長。

堆記憶體:程式設計師向作業系統申請一塊記憶體,當系統收到程式的申請時,會遍歷乙個記錄空閒記憶體位址的鍊錶,尋找第乙個空間大於所申請空間的堆結點,然後將該結點從空閒結點鍊錶中刪除,並將該結點的空間分配給程式。分配的速度較慢,位址不連續,容易碎片化。此外,由程式設計師申請,同時也必須由程式設計師負責銷毀,否則則導致記憶體洩露

堆,編譯器不用去管,程式設計師使用new和malloc來申請記憶體,但必須在不使用的時候使用delete和free釋放掉。

棧中存放著區域性變數,區域性常量,函式引數

常量儲存區內存放:全域性常量,函式指標,常量陣列,對函式指標

全域性變數、全域性靜態變數,區域性靜態變數,以及虛函式表

存放**

#include using namespace std;

int c=1;

static int q=1;

const int cg=1;

class qiao

};void test()

int main()

{ static int w=1;

//靜態儲存區

c 記憶體模型

1 棧區 由編譯器自動分配和釋放,存放函式的引數數值,區域性變數的值 其操作方式類似於資料結構中得棧 2 堆區一般由使用者分配和釋放,若使用者不釋放,程式結束時候由os 它與資料結構中堆是兩回事,分配方式類似鍊錶 3 全域性區 靜態區 static全域性變數和靜態變數的存放區域。初始化的全域性變數和...

C 記憶體模型

1.在c 中,不要在標頭檔案中進行變數宣告。因為單定義規則的存在,不同原始檔中對於同乙個全域性變數只能夠定義一次。因此如果在標頭檔案中包含變數定義,那麼很有可能使用相同標頭檔案的原始檔會對這個變數產生多次定義。2.new 與 delete等通過動態分配記憶體產生的資料將儲存在堆 heap 中。3.在...

C記憶體模型

程式執行時作業系統把磁碟的 load到記憶體,然後分配給該程序乙個記憶體空間,分為堆區,棧區,全域性區和 區如圖1所示。作業系統找到main函式開始執行程式。圖1 記憶體模型 區 存放程式的二進位制 全域性區 全域性變數和靜態變數。初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始...