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...