C 基礎 c語言記憶體分配

2021-09-29 23:35:38 字數 1786 閱讀 3898

c語言的4g虛擬定址空間的概念

c語言變數分配與5個區的概念

c語言變數的使用與作用域

區域性變數出作用域則銷毀

文字常量區的銷毀過程

**區的銷毀

全域性變數與靜態變數的銷毀

堆區的銷毀過程

計算機記憶體分配的最小單位是位元組,而資料操作的最小單位是位

乙個位元組=8個位

那麼我們現在用的計算機都是32位,所謂32位,表示的cpu能找到的範圍是

ffffffff(11111111 11111111 1111111111111111),換算成10進製就是0-4294967295(位元組)=4194303(k)=4096(m)=4(g)=t

cpu是通過位址匯流排來找對應的位置。

#include

#include

int k=1;

void main()

位址 內容

00000000

……0012ff74(n)

00422fb8

0012ff78(j)

00380fe0

0012ff7c(i

)1……00380fe0

2個空位元組

……0040100a

int k=1;//

全域性變數

void main()

……00422fb8

「hello」

……00427318(k)

10042731c

(m)1……

fffffff

int add()

int min()

void main()

位址 內容

00000000

棧指標

0012ff24(m) 5

0012ff28(k) 10

**區int add()

int min()

void main()

fffffff

文字常量區的內容隨著程序的結束進行自動釋放,對應銷毀的只是指向文字常量區的乙個指標變數而已。

int add()

int min()

void main()

位址 內容

00000000

棧指標

0012ff20

00422fb8

0012ff24 5

0012ff28 10

**區int add()

int min()

void main()

00422fb8

「hello」

fffffff

程序結束就銷毀

程序結束就銷毀

比如:靜態變數的範例

int add()

void main()

程序結束就銷毀,但是要考慮乙個問題,就是在程序執行的時候,不斷的分配堆記憶體,產生不夠分配的請況,這樣程序就會出現記憶體不夠退出程式的問題!

我們一定要在用完記憶體的時候,記得用free函式進行及時釋放。這個就是著名的記憶體洩漏!

#include

#include

int add()

void main()

位址 內容

00000000

0012ff20

棧指標

0012ff24

0012ff28

00381000

1000381048

5**區

int add()

void main()

fffffff

C語言記憶體分配

c語言的記憶體分配主要有5個區域 1 棧區 在執行函式時,函式內的區域性變數 不包括static變數 函式返回值的儲存單元在棧區上建立。函式執行結束時這些儲存單元自動被釋放。棧區記憶體分配運算內置於處理器的指令集中,效率很高,但分配的記憶體容量有限。2 堆區 程式在執行的時候用malloc call...

C語言記憶體分配

c語言的記憶體分配主要有5個區域 1 棧區 在執行函式時,函式內的區域性變數 不包括static變數 函式返回值的儲存單元在棧區上建立。函式執行結束時這些儲存單元自動被釋放。棧區記憶體分配運算內置於處理器的指令集中,效率很高,但分配的記憶體容量有限。2 堆區 程式在執行的時候用malloc call...

C語言記憶體分配

objective c從名字來看就可以知道是一門超c語言,所以了解c語言的記憶體模型對於理解objective c的記憶體管理有很大的幫助。c語言記憶體模型圖如下 從圖中可以看出記憶體被分成了5個區,每個區儲存的內容如下 棧區在什麼時候釋放記憶體呢?我們通過下面的乙個例子來說明下 void prin...