一、概述
在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執行的機器指令,區是共享的,只有乙份 是唯讀的。存放全域性變數 定義...