記憶體四區包括
靜态區,代碼區,堆區,棧區 存儲位址一次下降
靜态區:
全局變量和靜态變量存儲在靜态區。
堆區
malloc的變量放在堆區,堆區一般由程式員配置設定釋放, 若程式員不釋放,程式結束時可能由OS回 收 。注意它與資料結構中的堆是兩回事,配置設定方式倒是類似于連結清單。堆的增長方式由低位址向高位址
棧區
局部變量放在棧區,由編譯器自動配置設定釋放 ,存放函數的參數值,局部變量的值等。其操作方
式類似于資料結構中的棧。
棧的配置設定時由高位位址向低位位址。且注意,函數參數的載入時由又到左。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<code>//main.cpp </code>
<code>int</code> <code>a = 0; </code><code>//全局初始化區 </code>
<code>char</code> <code>*p1; </code><code>//全局未初始化區 </code>
<code>main() </code>
<code>{ </code>
<code>int</code> <code>b;</code><code>// 棧 </code>
<code>char</code> <code>s[] = </code><code>"abc"</code><code>; </code><code>//棧 </code>
<code>char</code> <code>*p2; </code><code>//棧 </code>
<code>char</code> <code>*p3 = </code><code>"123456"</code><code>; 123456/0";</code><code>//在常量區,p3在棧上。 </code>
<code>static</code> <code>int</code> <code>c =0; </code><code>//全局(靜态)初始化區 </code>
<code>p1 = (</code><code>char</code> <code>*)</code><code>malloc</code><code>(10); </code>
<code>p2 = (</code><code>char</code> <code>*)</code><code>malloc</code><code>(20); </code>
<code>//配置設定得來得10和20位元組的區域就在堆區。 </code>
<code>strcpy</code><code>(p1, </code><code>"123456"</code><code>); </code><code>//123456/0放在常量區,編譯器可能會将它與p3所指向的"123456"優化成一個地方。 </code>
<code>}</code>
注意char *p3 = "123456";
printf("%s",p3);//這裡輸出的123456 而不是123456所在的位址。
<a href="https://s4.51cto.com/oss/201710/26/e1f8c32c4a4b853c1008153c163ab212.jpg-wh_500x0-wm_3-wmp_4-s_4085938083.jpg" target="_blank"></a>
本文轉自 神迹難覓 51CTO部落格,原文連結:http://blog.51cto.com/ji123/1976539,如需轉載請自行聯系原作者