天天看點

記憶體四區

記憶體四區包括

靜态區,代碼區,堆區,棧區  存儲位址一次下降

靜态區:

    全局變量和靜态變量存儲在靜态區。

堆區

    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,如需轉載請自行聯系原作者

繼續閱讀