C 中的記憶體分割槽模型

2021-10-04 21:53:03 字數 1074 閱讀 7659

一、概述

在c++程式中,一般會將程式的內容按型別分別儲存在四個區域內。這四個區域分別是:全域性資料區、**區、堆區和棧區.

各區域儲存的資料型別和特點:

全域性資料區:由作業系統進行管理,用於存放全域性變數、全域性常量、字串常量以及靜態變數。

**區:由作業系統進行管理,用於存放各種函式體的二進位制**。

棧區:由編譯器負責分配和清理,用於存放函式體內部的區域性變數和函式的引數。

堆區:由程式設計師負責分配和**,若程式設計師不釋放,則在程式結束後有作業系統負責**。

二、在程式執行前就已分配的區域

1.**區:

特點:存放cpu執行的機器指令

1°資料共享:當乙個程式可能被頻繁使用時,比如同乙個exe檔案被單擊多次執行多個例項時,這多個例項只共享乙份**。

2°唯讀:**區的資料是唯讀不可寫的,原因是防止程式發生故障時意外修改了程式**。

2.全域性區:

特點;用於存放全域性變數、全域性常量、字串常量、static靜態變數。

注:c++中,常量分為字串常量和被const修飾的變數。而被const修飾的變數又可細分為兩種:一種是const修飾的全域性變數,又稱全域性常量。它們被儲存在全域性區中;另一種是const修飾的區域性變數,他們被儲存在棧區中。

三、在程式執行後才分配的區域

3.棧區:

我們看以下示例:

int

*test()

//當函式執行完畢後 int a=10作為乙個存放在棧區的區域性變數便被清空。

intmain()

4.堆區

c++中可以用new關鍵字來將乙個資料存放在堆區中

示例:

int

*fanc()

intmain()

執行結果:10 10 10

實際上,指標p作為乙個區域性變數仍然儲存在棧區,但是指標p指向的變數int(10)卻是存在了堆區里

C 記憶體分割槽模型

c 程式在執行時,將記憶體大方向劃分為4個區域 區 存放函式體的二進位制 由作業系統進行管理的 全域性區 存放全域性變數和靜態變數以及常量 棧區 由編譯器自動分配釋放,存放函式的引數值,區域性變數等 堆區 由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統 位址高低 棧區 堆區 全域性...

c 記憶體分割槽模型

區 存放所有 的二進位制 全域性區,存放全域性變數,靜態變數,常量 棧區,編譯器自動分配與釋放,存放函式引數值和區域性變數,隨函式結束而釋放 堆區,有程式設計師進行分配與釋放,或者函式結束時自動釋放 不同區域用於存放那個不同的資料,有不同的生命週期 在程式編寫完,編譯後,生成exe檔案,這時已經出現...

C 基礎 記憶體模型記憶體分割槽模型

區 存放函式體的二進位制 由作業系統進行管理 全域性區 存放全域性變數和靜態變數以及常量 棧區 由編譯器自動分配釋放,存放函式的引數值 區域性變數等 堆區 由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統 存放cpu執行的機器指令,區是共享的,只有乙份 是唯讀的。存放全域性變數 定義...