全域性 靜態 區域性變數的記憶體分配

2021-08-24 19:38:19 字數 540 閱讀 2134

在標準的c中,變數大概可以分為全域性變數(用extern修飾),靜態變數(用static修飾),區域性變數三中型別.

在記憶體中用於儲存變數的空間也可以分為堆區、棧區、全域性區(靜態區)。其中堆區:一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os**,一般存放malloc()函式申請請的變數空間;棧區:由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等;全域性區(靜態區):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。

驗證:靜態變數與全域性變數都存放在同一片區域當中

#include

/* 全域性變數*/

extern int itx = 1;

void main()

輸出的結果:

0x0042ad50

0x0042ad54

0x0012ff7c

從這裡可以看出istx

和itx

是存放在同一片連續的記憶體空間當中,相差4

個單元長度。其他儲存區的驗證方法以之相識。

全域性變數 靜態全域性變數 靜態區域性變數 區域性變數

全域性和靜態變數都在堆裡。這句話應該錯了,應該是放在常量資料段 全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用...

全域性變數 靜態全域性變數 靜態區域性變數 區域性變數

全域性和靜態變數都在堆裡。全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用在定義它的那個檔案裡,卻不能用在程式中...

全域性變數 靜態全域性變數區域性變數 靜態區域性變數

對於乙個完整的程式,在記憶體中的分布情況如下圖 區 low address 全域性資料區 堆區 棧區 high address 一般程式把新產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料 即使是函式內部的靜態區域性變數 也存放在全域性資料區。...