靜態區:儲存自動全域性變數和static變數(包括static全域性和區域性變數)。靜態區的內容在總個程式的生命週期內都存在,由編譯器在編譯的時候分配。
堆:由malloc系列函式或new操作符分配的記憶體,其生命週期由free或delete決定。在沒有釋放之前一直存在,直到程式結束,其特點是使用靈活,空間比較大,但容易出錯
棧:儲存區域性變數,棧上的內容只在函式的範圍內存在,當函式執行結束,這些內容也會自動被銷毀,其特點是效率高,但空間大小有限
例子;code:
#include
int a = 0;//全域性初始化區
char *p1; //全域性未初始化區
main()
再來看下各個生命週期:
外部變數=全域性變數
作用域:從定義處到原始檔結束
生命週期:從程式執行開始-程式執行結束
區域性變數
作用域:函式(復合語句)內部
生命週期:從函式呼叫開始-函式呼叫結束
static區域性變數
作用域:同區域性變數
生命週期:同外部變數
static全域性變數
作用域:被編譯檔案的剩餘部分
生命週期:同全域性變數
當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。 而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。
外部變數(extern)
在某個程式檔案模組中定義,該變數可以在整個程式的所有檔案模組中起作用。只是在其他模組中使用的時候,必須要把他宣告稱外部變數,即在前面加extern。
記憶體分配中的堆 棧 靜態區 唯讀區
記憶體中的棧區處於相對較高的位址以位址的增長方向為上的話,棧位址是向下增長的,棧中分配區域性變數空間,堆區是向上增長的用於分配程式設計師申請的記憶體空間。另外還有靜態區是分配靜態變數,全域性變數空間的 唯讀區是分配常量和程式 空間的 以及其他一些分割槽。對於常量,在實際情況中,是會復用的,比如變數a...
C 記憶體 堆疊靜態儲存區
學習c 如果不了解記憶體分配是一件非常可悲的事情。而且,可以這樣講,乙個c 程式設計師無法掌握記憶體 無法了解記憶體,是不能夠成為乙個合格的c 程式設計師的。一 記憶體基本構成 可程式設計內存在基本上分為這樣的幾大部分 靜態儲存區 堆區和棧區。他們的功能不同,對他們使用方式也就不同。靜態儲存區 內存...
記憶體區 堆疊
一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其 操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os回 收 注意它...